代码中的错误,宏变量应返回列表中的第一个值,但它返回最后一个值

时间:2017-07-20 17:30:00

标签: sas-macro

我的代码中有错误。它应返回列表中的第一个值,但返回最后一个值。我的代码

%macro r(one, two);
%local cnt num;
%let cnt=0;
%let num=0;
%do %while(%scan(&one,%eval(&cnt+1),%str( )) ne %str( )); 
%let cnt = %eval(&cnt+1);
%if %upcase(%scan(&one,&cnt,%str( )))=%upcase(&two) %then
%let num=&cnt;
%end;
&num 
%mend r;

option mlogic symbolgen;
%put b is at position %r(a b c b, b);

输出应该是2但是我输出为4.任何人都可以帮我弄清楚我的错误。提前谢谢。

1 个答案:

答案 0 :(得分:1)

一旦找到匹配项,您需要添加一个标准来退出while循环。否则它会继续寻找,这不是你的目标。

%macro r(one, two);
%local cnt num;
%let cnt=0;
%let num=0;
%do %while(&num.=0 and (%scan(&one,%eval(&cnt+1),%str( )) ne %str( ))); 
  %let cnt = %eval(&cnt+1);
  %if %upcase(%scan(&one,&cnt,%str( )))=%upcase(&two) %then
    %let num=&cnt;
%end;
&num 
%mend r;

option mlogic symbolgen;
%put b is at position %r(a b c b, b);