%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;
我有以下代码:
%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;