2010-06-02 3 views
1

Когда я открываю файл SAS в руководстве по предпринимательству и запускаю его, он выполняется на сервере. Сам исходный файл находится либо на производственной площадке, либо на сайте разработки. В обоих случаях он выполняется на том же сервере. Я хочу, чтобы мой сценарий мог хранить результаты в относительной папке. Но если я что-то вродеОпределить папку исходного файла SAS

libname lib_out xport "..\tmp\foobar.xpt"; 

Я получаю сообщение об ошибке писать, потому что рабочая папка процесса SAS Enterprise Guide не место моего исходного файла, но папка на сервере. И папка ..\tmp там не существует. Даже если это произойдет, серверный процесс не имеет разрешения на запись в этой папке.

Я хотел бы определить, из какой папки был загружен файл .sas, и соответственно установите рабочую папку. В одном случае это S:\Development\myproject\sas\foobar.sas, а в другом случае это S:\Production\myproject\sas\foobar.sas

Это вообще возможно? Или как вы это сделаете?

ответ

1

В зависимости от способа EG сконфигурирован, вы можете быть в состоянии использовать что-то вроде syshostname глобальной переменной макроса, чтобы определить, где сохранить свои результаты:

%macro sasdir; 
    %global sasdir; 
    %if "&syshostname" eq "mydevelopmenthost" %then %do; 
     %let sasdir = S:\Development; 
    %end; 
    %else %if "&syshostname" eq "myproductionhost" %then %do; 
     %let sasdir = S:\Production; 
    %end; 
%mend; 
%sasdir; 

libname lib_out xport "&sasdir\myproject\sas\tmp\foobar.xpt"; 

Если нет, то попробуйте посмотреть на то, что другие глобальные или автоматические макропеременные могут быть в состоянии помочь вам, выполнив:

%put _all_; 

Надеется, что это помогает

Cheers Rob

+0

спасибо. Это можно использовать. Не идеально, но достаточно хорошо. Довольно убедительно, оказалось, что скрипт, содержащий этот код, должен быть заменен скриптом SPSS, в котором у меня есть одна и та же проблема ...: | И я еще не понял, как получить имя машины клиента в SPSS ... – exhuma

+0

Приятно слышать. Да, это очень сложно дать вам именно то, что вам нужно, не зная всех деталей вашей среды. Существует много способов скрыть эту кошку, но это относительно просто. Не могу помочь с SPSS извините! –

1

ОК, это не будет точно отвечать на ваш вопрос, но у меня этот макрос легко доступен, поэтому я решил поделиться им. Отсюда вам просто нужно немного обработать струны.

%macro progName; 
%* Returns the name of current program; 
    %let progPath = %sysfunc(GetOption(SysIn)); 
    %* if running in interactive mode, the above line will not work, and the next line should; 
    %if %length(&progPath) = 0 %then %let progPath = %sysget(SAS_ExecFilePath); 

    %str(&progPath) 
%mend progName; 
Смежные вопросы