首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于检测它是否在SAS基础或SAS EG中运行的SAS程序。

用于检测它是否在SAS基础或SAS EG中运行的SAS程序。
EN

Stack Overflow用户
提问于 2015-09-03 06:21:50
回答 2查看 1K关注 0票数 5

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-03 10:12:36

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

例如,当您使用:

代码语言:javascript
运行
复制
 data _null_;
  %put &_CLIENTAPP;
 run;

在EG5.1中,它返回'SAS企业指南‘。

_CLIENTVERSION返回我的环境的E.G.版本,例如:‘5.100.0.15040’

不确定这些全局变量是否存在于base中(目前无法测试这一点),但如果它不起作用,您可以假设,如果变量不存在它的基,例如:

代码语言:javascript
运行
复制
 if "&_CLIENTAPP" = 'SAS Enterprise Guide' then
    *do eg stuff
 else
    *do base stuff
票数 4
EN

Stack Overflow用户

发布于 2018-10-22 18:17:22

你所说的SAS基地是指批处理模式吗?有一个名为SYSPROCESSNAME的自动宏变量,可用于区分批处理和交互模式。

在批处理模式中,它的值是您正在执行的程序的名称。在EG和SAS Studio中,它的值是DMS中的"Object“(如果您正在运行第二个会话,则值为"DMS Process”或"DMS Process (2)“)。

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

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

代码语言:javascript
运行
复制
%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();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32368285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档