当我在企业指南中打开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
这有可能吗?或者你会怎么做?
答案 0 :(得分: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;
答案 1 :(得分: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_;
希望这有帮助
干杯 罗布