在SAS中一次一个地将多个变量馈送到同一个单变量模型

时间:2015-01-22 17:23:11

标签: macros sas

我是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.);

但是这仍然需要我逐个列出所有变量,但由于它们都是在数据文件中以连续顺序列出的,有更好的方法吗? 谢谢!

2 个答案:

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