我有一个包含10多个因变量和几个分类变量作为自变量的数据集。我打算使用proc sgplot和proc混合函数进行分析。但是,将所有变量逐个放在同一个函数中将非常耗时。我对SAS很陌生,有没有办法创建一个带有因变量的循环并将它们放入函数中。 类似的东西:
%let var_list= read math science english spanish
proc mixed data=mydata;
model var_list= gender age race/ solution;
random int/subject=School;
run;
谢谢!
答案 0 :(得分:2)
SAS有一种可用于生成代码的宏语言。但是对于此问题,您可能只想重新构建数据,以便可以使用BY
处理。
data tall ;
set mydata ;
array var_list read math science english spanish ;
length varname $32 value 8;
do _n_=1 to dim(var_list);
varname=vname(var_list(_n_));
value = var_list(_n_);
output;
end;
run;
proc sort data=tall;
by varname ;
run;
现在,您可以使用一个PROC MIXED调用处理VARNAME
的每个值(即&#39; read&#39;,&#39; math&#39;,....)作为单独的分析。< / p>
proc mixed data=tall;
by varname;
model value = gender age race/ solution;
random int/subject=School;
run;
答案 1 :(得分:1)
我会做这样的事情。这会在proc mixed -call周围创建一个循环。我没有看一下proc mixed -specification,但是这可能不像你的例子中描述的那样工作。
循环可以正常工作,并循环遍历proc mixed -call的所有位置,并根据因变量列表中的元素数量动态调整循环。
首先定义一些宏变量。
%let y_var_list = read math science english spanish;
%let x_var_list = gender age race;
%let mydata = my_student_data;
然后定义执行循环的宏。
%macro do_analysis(my_data=, y_variables=, x_variables=);
%* this checks the nr of variables in y_var_list;
%let len_var_list = %eval(%sysfunc(count(&y_variables., %quote( )))+1);
%do _i=1 %to &len_var_list;
%let y_var = %scan(&y_variables, &_i);
%put &y_var; %* just printing out the macrovar to be sure it works;
%* model specification;
proc mixed data=&my_data.; %* data given as parameter in the macro call. proc mixed probably needs some output options too, to work;
model &y_var = &x_variables/ solution; %* independent vars as a macro parameter;
random int/subject=School;
run;
%end;
%mend do_analysis;
最后但并非最不重要的是,请记住使用给定的变量列表和数据集规范调用宏。希望这有帮助!
%do_analysis(my_data=&mydata, y_variables=&y_var_list, x_variables=&x_var_list);