繁体   English   中英

将变量列表读入sas宏

[英]Reading variable list into sas macro

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

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; 

一些如何这是行不通的。 任何帮助将不胜感激。

如果要遍历列表中的名称,则可以使用常规的%DO ... %TO循环。 无需手动初始化或递增计数器。

%do i=1 %to %sysfunc(countw(&name_list));
  %let name=%scan(&name_list,&i);
 .... place code here that uses &NAME ....
%end;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM