Определите папку исходного файла 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

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


person exhuma    schedule 02.06.2010    source источник


Ответы (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_; 

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

Ура Роб

person Robert Penridge    schedule 03.06.2010
comment
Благодарю. Это можно использовать. Не идеально, но достаточно хорошо. Досадно, что оказалось, что скрипт, содержащий этот код, должен быть заменен скриптом SPSS, в котором у меня точно такая же проблема... :| И я еще не понял, как получить имя клиентской машины в SPSS... - person exhuma; 04.06.2010
comment
Рад слышать. Да, довольно сложно дать вам именно то, что вам нужно, не зная всех деталей вашей среды. Есть много способов снять шкуру с этой кошки, но это относительно простой способ. Не могу помочь с SPSS извините! - person Robert Penridge; 05.06.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;
person Lauren Samuels    schedule 02.06.2010