Когда я открываю файл SAS в руководстве предприятия и выполняю его, он выполняется на сервере. Сам исходный файл расположен или на месте производства или на участке разработки. В обоих случаях это выполняется тот же сервер как бы то ни было. Я хочу смочь сказать моему сценарию хранить результаты в относительной папке. Но если я пишу что-то как
libname lib_out xport "..\tmp\foobar.xpt";
Я получаю ошибку, потому что рабочая папка процесса Руководства SAS Enterprise не является местоположением моего исходного файла, но папкой на сервере. И папка ..\tmp
не существует там. Даже если это было бы, серверный процесс не иметь разрешения записи в той папке.
Я хотел бы определить от который папка .sas
файл был загружен и установил рабочую папку соответственно. В одном случае это S:\Development\myproject\sas\foobar.sas
и в другом случае это S:\Production\myproject\sas\foobar.sas
Это это возможное вообще? Или как Вы сделали бы это?
В зависимости от того, как настроен 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
Хорошо, это не совсем отвечает на ваш вопрос, но у меня есть этот макрос в свободном доступе, поэтому я решил им поделиться. Отсюда вам нужно будет просто выполнить небольшую обработку строки.
%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;