我编写的程序需要不同的信息,无论是否在SAS base或SAS EG中运行。是否可以编写一个SAS程序来检测它是在SAS EG还是SAS基础上运行?
答案 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();