1

当我在企业指南中打开一个 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

这可能吗?或者你会怎么做?

4

2 回答 2

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;
于 2010-06-02T14:02:34.737 回答
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_; 

希望这可以帮助

干杯抢

于 2010-06-03T20:32:22.083 回答