我是SAS的新用户。我正在尝试使用线性回归进行多个但简单的探索性单变量分析。我希望找到一种更有效的编写SAS代码的方法。 例如,我想到的是以下内容:
proc reg data=test;
model bmi= age;
model bmi= calperday;
model bmi= exercise;
model bmi= (etc....);
run;
但我可能还有其他20个预测变量,我宁愿不逐一列出它们。 PROC CORR只会给出相关性和P值,但我实际上也希望看到剩余分布。我知道如果我像这样使用Macro,我可以缩短一点:
%macro univar(var);
proc reg data=test;
model bmi = &var;
run;
%mend univar;
%univar(age); %univar(calperday); %univar(etc.);
但是这仍然需要我逐个列出所有变量,但由于它们都是在数据文件中以连续顺序列出的,有更好的方法吗? 谢谢!
答案 0 :(得分:0)
翻转您的数据,以便您可以使用BY组处理。这仅适用于所有数字变量。我也喜欢避免宏观。
*Flip data set;
data class;
set sashelp.class;
array vars(*) _numeric_;
do i=1 to dim(vars);
var_name=vname(vars(i));
value=vars(i);
output;
end;
keep weight var_name value;
run;
*Sort for by processing;
proc sort data=class;
by var_name;
run;
proc reg data=class;
by var_name;
where lower(var_name) ne 'weight';
model weight = value;
run;
答案 1 :(得分:0)
如果您正在寻找宏观解决方案,这可能有所帮助。您可以通过PROC CONTENT语句列出主数据集中的所有变量,并将可变名称复制粘贴到宏。
%let var = age calperday exercise etc;
%macro univar;
%do i=1 %to %eval(%sysfunc(countc(&var., " "))+1);
%let var1 = %scan(&var, &i);
%put var1;
proc reg data = test;
model bmi = &var1.;
run;
%end;
%mend;