从SAS中的宏调用宏

时间:2016-07-28 21:42:58

标签: sas sas-macro

我正在尝试使用此宏来运行不同的代码段。当我自己选择并运行%if语句时,它们可以工作。但是,当我尝试运行%begin宏时,SAS EG会立即告诉我程序已完成且没有错误。但是,我的代码都没有运行。这让我相信我有语法错误。有谁知道发生了什么?

%macro begin();
%if &run_NLI_LTC. = "Y" %then %do;
%MDI(1,NonLI_LTC);
%compare(1);
%end;

%if &run_LCE. = "Y" %then %do;
%MDI(2,LCE);
%compare(2);
%end;
%mend begin;
%begin;

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

我的猜测,只有您提供的信息,错误就在这里:

%if &run_LCE. = >>"Y"<< %then %do;

&run_LCE.包含哪些内容? Y"Y"?宏变量不是'#39;字符&#39;变量,因此不使用引号,除非它们实际上是变量内容的一部分。通常情况下,我在宏变量中只有Y,所以你需要

%if &run_LCE. = Y %then %do;

您可以通过启用%if选项(mlogic)来验证options mlogic;是否失败,该选项将以宏语言打印到日志中每个逻辑比较的结果。< / p>

答案 1 :(得分:0)

您的环境可能会出现宏未正确结束的情况。我可以在EG 7.1中无错误地运行以下内容。

%macro printit(s);
%put &s;
%mend;

%macro begin(x);
%if %sysevalf(&x > 0) %then %do;
    %printit(x > 0);
%end;
%if %sysevalf(&x < 0) %then %do;
    %printit(x > 0);
%end;
%if %sysevalf(&x = 0) %then %do;
    %printit(x = 0);
%end;
%mend begin;

%begin(1);

尝试重新连接到SAS(右键单击活动服务器,然后选择“断开连接”)并运行上述步骤。

如果可行,那么您的代码中可能会有一个未正确结束的宏。也就是说,SAS进入一个认为它仍在编译宏的状态。它不时发生,最简单的修复方法是重启SAS会话。