SAS Enterprise指南和条件宏值

时间:2015-04-09 10:31:22

标签: sas sas-macro enterprise-guide

我有一个简单的宏来检查数据集(DATA01)的存在:

%GLOBAL base_exists;
%MACRO does_base_exist();
  %IF %SYSFUNC(exist(DATA_01)) %THEN
    %LET base_exists= 1;
  %ELSE %LET base_exists= 0;

%MEND;

%does_base_exist();

%PUT Base exist check is &base_exists 

上面的代码在我的主进程之前执行的程序中指示。 outpu消息显示为:

"Base exist check is 1"

我在主进程上设置了一个限制,只有在& base_exists等于1时才会运行(实际上是这样)。出于某种原因,我的主要流程一直未能说明& base_exists不存在。

关于我做错的任何想法?我是EG的新手,更习惯于在BASE SAS工作。

更新 为了清楚起见,我在我的errro& base_exists中加了一个's'。

2 个答案:

答案 0 :(得分:4)

如果您愿意,可以进一步简化这一过程。甚至不需要宏。您只需要打开代码中的这一行:

%let base_exists = %sysfunc(exist(DATA_01));

该函数将返回一个值或01,因此甚至不需要if语句。因为您不需要宏,所以您也不会需要%global语句,因为在开放代码中定义的任何宏都将自动为全局。

答案 1 :(得分:1)

我已经设法在各种尝试后修复它。更多经验EG用户可能会认为这是微不足道的,但无论如何我会发布它,对于像我这样的初学者来说。

我将宏定义作为AutoExec的一部分。我将它移动到我的流程流中并将其连接到使用宏作为条件变量的Process。它还需要设置为%GLOBAL,以便在特定程序范围之外使用它。

现在似乎很开心。