我想在宏函数中运行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;
答案 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,则宏循环停止。