SAS循环宏内的变量列表(每次读取一个)

时间:2014-03-28 19:56:59

标签: sas sas-macro

我需要对宏内的变量列表进行循环。

列表是按以下方式创建的(我已经使用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内.....

我知道这应该很容易,因为我无法理解。

感谢!!!!

2 个答案:

答案 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;