%If%else在SAS Macro中如何工作

时间:2017-01-21 02:21:44

标签: macros sas sas-macro

我有以下代码:

%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语句总是被执行?

2 个答案:

答案 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;