我需要对宏内的变量列表进行循环。
列表是按以下方式创建的(我已经使用MO,nu或KA开始了我想要的变量名称):
proc sql noprint;
select name into :varsi separated by ' '
from dictionary.columns
where libname eq 'LABIMP' and memname eq 'MUESTRA1'
and (NAME LIKE 'MO_%' OR NAME LIKE 'nu_%' or name like 'KA_%');
quit;
然后,我需要为每个宏运行一个宏...这个宏在以下数据步骤中:
data labimp.muestra1;
set labimp.muestra1;
counter + 1;
by nnumero_de_cliente;
if first.nnumero_de_cliente then counter = 1;
%addTendency(&varsi);
run;
当然这种方式不起作用,因为它同时带来了所有变量。重要的是,如果我需要一个循环必须保留在另一个datastep内.....
我知道这应该很容易,因为我无法理解。
感谢!!!!
答案 0 :(得分:1)
执行此操作的最佳方法是设计proc sql
步骤以创建所有这些宏调用。
proc sql ;
select cats('%addTendency(',name,')'
into :tendencyList separated by ' '
from dictionary.columns
where libname eq 'LABIMP' and memname eq 'MUESTRA1'
and (NAME LIKE 'MO_%' OR NAME LIKE 'nu_%' or name like 'KA_%');
quit;
这会创建一个%addTendency()调用列表,然后通过引用& trendList(我命名,但你可以另外命名)调用它:
data labimp.muestra1;
set labimp.muestra1;
counter + 1;
by nnumero_de_cliente;
if first.nnumero_de_cliente then counter = 1;
&tendencyList.
run;
答案 1 :(得分:0)
您可以执行以下操作:
%do i=1 %to %sysfunc(countw(&varsi));
%addTendency(%scan(&varsi, &i));
%end;