我正在尝试使用此宏来运行不同的代码段。当我自己选择并运行%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;
感谢您的帮助!
答案 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会话。