SAS程序,用于检测是否在SAS base或SAS EG中运行

时间:2015-09-03 06:21:51

标签: sas

我编写的程序需要不同的信息,无论是否在SAS base或SAS EG中运行。是否可以编写一个SAS程序来检测它是在SAS EG还是SAS基础上运行?

2 个答案:

答案 0 :(得分:3)

您可以使用全局宏变量_CLIENTAPP来测试您是否在EG中。

当你使用例如:

 data _null_;
  %put &_CLIENTAPP;
 run;

在EG 5.1中,它返回' SAS企业指南'。

_CLIENTVERSION返回E.G.版本,例如:' 5.00.0.15040'对于我的环境

不确定这些全局变量是否存在于Base中(目前无法对此进行测试),但如果它不起作用,您可以假设类似于变量不存在的基础,例如:

 if "&_CLIENTAPP" = 'SAS Enterprise Guide' then
    *do eg stuff
 else
    *do base stuff

答案 1 :(得分:1)

按SAS Base的意思是批处理模式?有一个名为SYSPROCESSNAME的自动宏变量,可用于区分批处理模式和交互模式。

在批处理模式下,它的值是您正在执行的程序的名称。 在EG和SAS Studio中,其值为“对象服务器” 在DMS中,值为“ DMS进程”(如果正在运行第二个会话,则为“ DMS进程(2)”)。

如果需要区分SAS EG和SAS Studio,则应在本主题中使用由kl78编写的_CLIENTAPP解决方案。

确定您当前模式的示例代码:

%macro whereDoesItRun();
    %if (%superQ(sysProcessName) eq %quote(Object Server)) %then %do;
        %if %symexist(_clientApp) %then %do;
            %if (%quote(&_clientApp) eq 'SAS Studio' or %quote(&_clientApp) eq 'SAS Enterprise Guide') %then %do;
                %put Running in &_clientApp;
            %end;
            %else %do;
                %put Running unknown client &_clientApp;
            %end;
        %end;
        %else %do;
            %put Running unknown client;
        %end;
    %end;
    %else %if %index(%superQ(sysProcessName), %quote(DMS Process)) %then %do;
        %put Running as &sysProcessName;
    %end;
    %else %do;
        %put Running %qScan(%superQ(sysProcessName), 2, %str( )) in batch mode;
    %end;
%mend whereDoesItRun;

%whereDoesItRun();