我有以下代码:
%macro TEST();
%let prev=3;
%do i=1 %to 4;
%if &i>2 %then %do;
%put prev = 5;
%end;
%else;
%put prev = 0;
%end;
%end;
%mend;
执行时,返回:
prev = 0
prev = 0
prev = 5
prev = 0
prev = 5
prev = 0
我的问题是 - if-else语句在SAS Macro中是如何工作的 - 为什么else语句总是被执行?
答案 0 :(得分:1)
您的代码中包含错误。 %ELSE
语句由于缺少%DO
而无法执行任何操作。因此,始终执行第二个%PUT
语句。
应该是:
%macro TEST();
%let prev=3;
%do i=1 %to 4;
%if &i>2 %then %do;
%put prev = 5;
%end;
%else %do; /* <=== */
%put prev = 0;
%end;
%end;
%mend;
答案 1 :(得分:1)
您的代码不会为我运行,它会生成错误。
错误:%END没有匹配的%DO语句。该声明将被忽略。
我相信你的意图如下,这与其他解决方案很接近,但并不完全相同。而不是添加%do,移动%put语句。
%macro TEST();
%let prev=3;
%do i=1 %to 4;
%if &i>2 %then
%do;
%put prev = 5;
%end;
%else
%put prev = 0;
%end;
%mend;
%test;