【问题标题】:How does %If %else work in SAS Macro%If %else 如何在 SAS 宏中工作
【发布时间】:2017-01-21 02:21:44
【问题描述】:

我有以下代码:

%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 宏中如何工作 - 为什么总是执行 else 语句?

【问题讨论】:

  • 您的代码无法在我的机器上运行,语法错误。错误:%END 没有匹配的 %DO 语句。该语句将被忽略。请参阅@vknowles 解决方案以获取答案。
  • %ELSE 后面是空语句。第二个%PUT 不是%ELSE 子句的一部分,所以它总是运行。

标签: macros sas sas-macro


【解决方案1】:

您的代码无法为我运行,它会产生错误。

错误:没有与 %END 匹配的 %DO 语句。该语句将被忽略。

我相信您的意图如下,这与其他解决方案很接近,但并不完全一致。移动 %put 语句,而不是添加 %do。

%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;

【讨论】:

    【解决方案2】:

    您的代码中有错误。由于缺少%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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多