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

How does %If %else work in 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;

执行时,returns:

prev = 0
prev = 0
prev = 5
prev = 0
prev = 5
prev = 0

我的问题是 - if-else 语句在 SAS 宏中如何工作 - 为什么总是执行 else 语句?

您的代码中有错误。由于缺少 %DO%ELSE 语句不执行任何操作。因此,第二个%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;

你的代码不适合我 运行,它会产生错误。

ERROR: There is no matching %DO statement for the %END. This statement will be ignored.

我相信您打算使用以下解决方案,它与其他解决方案接近但不完全相同。不要添加 %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;