迭代时限制%do%

时间:2014-05-15 12:19:27

标签: sas sas-macro

我想在宏函数中运行while / until循环,并且限制其最大迭代次数。我发现如何在'通常'sas中做到这一点:

 data dataset;
    do i=1 to 10 until(condition);      /*10 iterations max */
        /* stuff */
    end;
 run;

但如果我在宏功能中尝试它:

 %macro mf;
 data dataset;
 %do i=1 %to 10 %until(nrow(X)>10);      /*10 iterations max */
 /* stuff */
 %end;
 run;
 %mend;

%mf;

我收到这些错误:

ERROR: Improper use of macro reserved word until.
ERROR: A dummy macro will be compiled.
ERROR: Required operator not found in expression: 10 %until(nrow(X)>10)
ERROR: The %TO value of the %DO I loop is invalid.
ERROR: The macro MF will stop executing.

在宏函数中限制循环迭代的正确方法是什么?

这是一个数据集,以防您想要测试想法:

DATA dataset;
input X Y Z;
cards;
10 0 20
50 20 60
90 60 30
run;

1 个答案:

答案 0 :(得分:5)

以下是您可以使用的示例:

%macro mf;
  %let i=0;
  %do %until(&onechar=e or &i=10);
    %let i=%eval(&i+1);
    %let onechar=%substr(abcdefghij,&i,1);
  %end;
  %put onechar=&onechar;
  %put i=&i;
%mend mf;
%mf;

如果宏循环找到“e”或i = 10,则宏循环停止。