SAS遍历宏内的变量列表(每次读取一个)(SAS Loop over a list of varia

2019-10-19 17:30发布

我需要在一个宏内部变量列表做一个循环。

通过以下方式(我已经开始,我想用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里面.....

我知道它应该很容易通过我无法弄清楚。

谢谢!!!!

Answer 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(列表)调用,你再通过引用&tendencyList打电话(我命名,但可以以其他方式命名):

data labimp.muestra1;
set labimp.muestra1;

counter + 1;
by nnumero_de_cliente;
if first.nnumero_de_cliente then counter = 1;

&tendencyList.

run;


Answer 2:

你可以做类似如下:

%do i=1 %to %sysfunc(countw(&varsi));
  %addTendency(%scan(&varsi, &i));
%end;


文章来源: SAS Loop over a list of variables inside a macro (read one each time)
标签: sas sas-macro