我有一个简单的宏来检查数据集(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'。
答案 0 :(得分:4)
如果您愿意,可以进一步简化这一过程。甚至不需要宏。您只需要打开代码中的这一行:
%let base_exists = %sysfunc(exist(DATA_01));
该函数将返回一个值或0
或1
,因此甚至不需要if
语句。因为您不需要宏,所以您也不会需要%global
语句,因为在开放代码中定义的任何宏都将自动为全局。
答案 1 :(得分:1)
我已经设法在各种尝试后修复它。更多经验EG用户可能会认为这是微不足道的,但无论如何我会发布它,对于像我这样的初学者来说。
我将宏定义作为AutoExec的一部分。我将它移动到我的流程流中并将其连接到使用宏作为条件变量的Process。它还需要设置为%GLOBAL,以便在特定程序范围之外使用它。
现在似乎很开心。