Определите папку исходного файла SAS - PullRequest
1 голос
/ 02 июня 2010

Когда я открываю файл 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

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

Ответы [ 2 ]

1 голос
/ 04 июня 2010

В зависимости от того, как настроен 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_; 

Надеюсь, это поможет

Приветствие Rob

1 голос
/ 02 июня 2010

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

%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;
...