【问题标题】:Feeding multiple variables to the same univariate model, one by one at a time in SAS在 SAS 中一次一个地将多个变量输入到同一个单变量模型中
【发布时间】:2016-01-06 03:14:36
【问题描述】:

我是 SAS 的新用户。我正在尝试使用线性回归进行多重但简单的探索性单变量分析。我希望找到一种更有效的方式来编写 SAS 代码。 例如,我想到的是以下内容:

proc reg data=test;
  model bmi= age;
  model bmi= calperday;
  model bmi= exercise;
  model bmi= (etc....);
run;

但我可能还有 20 个其他预测变量,我不想一一列出。 PROC CORR 只会给出相关性和 P 值,但我实际上也想查看残差分布。我知道如果我像这样使用宏,我可以缩短一点:

%macro univar(var);
proc reg data=test;
  model bmi = &var;
run;
%mend univar;
%univar(age); %univar(calperday); %univar(etc.);

但这还是需要我把所有的变量一一列出来,但是既然在数据文件中都是按连续的顺序列出来的,有没有更好的办法呢? 谢谢!

【问题讨论】:

  • 您可以查看调用 execute 来处理变量并从 proc 内容、proc 数据集或 sashelp.vcolumn 中获取变量名称。这里有很多答案证明了这种方法。

标签: macros sas


【解决方案1】:

改为翻转您的数据,以便您可以使用 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;

【讨论】:

    【解决方案2】:

    如果您正在寻找宏观解决方案,这可能会有所帮助。您可以通过 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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多