我问了一个老问题。我有代码,并查看过以前的问题,但我无法纠正我的错误。下面是带有虚拟数据的代码。我无法将变量名称传递给宏。
data x;
inputs x$ y z;
datalines;
a 23 34
b 34 43
a 23 54
b 87 78
a 12 32
b 22 33
;
run;
现在我创建一个变量列表
%let name_list=y z;
然后我写宏。
%macro mixed;
%let j=1;
%let first=%scan(&name_list.,%eval(&j));
%do %while (&first ne );
proc mixed data=x;
class x;
model &name_list.=;
random x;
ods output covParms=cov1;
run;
%let j=%eval(&j+1);
%let first=%scan(&name_list.,%eval(&j));
%end;
run;
%mend;
%mixed;
这有些不起作用。任何帮助将不胜感激。
答案 0 :(得分:0)
如果要迭代列表中的名称,则可以使用普通的%DO ... %TO
循环。无需手动初始化或增加计数器。
%do i=1 %to %sysfunc(countw(&name_list));
%let name=%scan(&name_list,&i);
.... place code here that uses &NAME ....
%end;