SAS 企业指南和条件宏值

SAS Enterprise guide and conditional Macro Values

我有一个简单的宏来检查数据集 (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(即为 1)时,我已将主进程设置为仅 运行。出于某种原因,我的主要进程一直失败,说明 &base_exists 不存在。

对我做错了什么有什么想法吗?我是 EG 的新手,更习惯于在 BASE SAS 中工作。

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

经过各种尝试,我已经设法修复了它。更有经验的 EG 用户可能会认为这是微不足道的,但无论如何我都会 post 它,对于像我这样的初学者。

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

现在好像很开心

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

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

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