我正在编写一个程序,它需要不同的信息,无论是在SAS、base还是SAS EG中运行。是否可以编写一个SAS程序来检测它是运行在SAS EG还是SAS基础上?
发布于 2015-09-03 10:12:36
您可以使用全局宏变量_CLIENTAPP来测试您是否在EG中。
例如,当您使用:
data _null_;
%put &_CLIENTAPP;
run;
在EG5.1中,它返回'SAS企业指南‘。
_CLIENTVERSION返回我的环境的E.G.版本,例如:‘5.100.0.15040’
不确定这些全局变量是否存在于base中(目前无法测试这一点),但如果它不起作用,您可以假设,如果变量不存在它的基,例如:
if "&_CLIENTAPP" = 'SAS Enterprise Guide' then
*do eg stuff
else
*do base stuff
发布于 2018-10-22 18:17:22
你所说的SAS基地是指批处理模式吗?有一个名为SYSPROCESSNAME的自动宏变量,可用于区分批处理和交互模式。
在批处理模式中,它的值是您正在执行的程序的名称。在EG和SAS Studio中,它的值是DMS中的"Object“(如果您正在运行第二个会话,则值为"DMS Process”或"DMS Process (2)“)。
如果需要区分SAS和Studio,则应在本主题中使用由_CLIENTAPP编写的kl78解决方案。
确定当前模式的示例代码:
%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();
https://stackoverflow.com/questions/32368285
复制相似问题