1

我有一个简单的宏来检查数据集(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 

上面的代码在我的主进程之前执行的程序中指示。输出消息内容如下:

"Base exist check is 1"

我对我的主进程设置了一个配置,仅在 &base_exists 等于 1 时运行(它是)。出于某种原因,我的主要过程一直未能说明 &base_exists 不存在。

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

更新: 为了清楚起见,我在我的错误 &base_exists 中附加了一个“s”。

4

2 回答 2

4

如果你愿意,你可以进一步简化它。甚至不需要宏。您所需要的只是开放代码中的这一行:

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

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

于 2015-04-09T14:47:00.077 回答
1

经过各种尝试,我设法修复了它。更有经验的 EG 用户可能会认为这很琐碎,但我还是会发布它,以供像我这样的初学者使用。

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

现在好像很幸福。

于 2015-04-09T14:00:17.197 回答