将变量列表读入sas宏

时间:2017-05-18 19:36:01

标签: variables macros sas

我问了一个老问题。我有代码,并查看过以前的问题,但我无法纠正我的错误。下面是带有虚拟数据的代码。我无法将变量名称传递给宏。

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; 

这有些不起作用。任何帮助将不胜感激。

1 个答案:

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