Определите папку исходного файла SAS

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

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

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

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

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

1
задан exhuma 2 June 2010 в 13:12
поделиться

2 ответа

В зависимости от того, как настроен 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
ответ дан 3 September 2019 в 00:07
поделиться

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

%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;
1
ответ дан 3 September 2019 в 00:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: