SAS CODE 对变量进行排序 均值从最高到最低均值

SAS CODE to order variables Means from highest to lowest mean

提问人:N3T2S1 提问时间:10/15/2023 最后编辑:TomN3T2S1 更新时间:10/16/2023 访问量:51

问:

我无法使用 SAS 代码对一组变量均值进行从最高到最低的排序。

我已经得到了每个变量的均值,但我无法让 SAS 将变量从最高均值到最低均值排序。

我已经试过了:

proc means data=stats std mean; 
  var x1 x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 x12 x13 x14 x15 x16 x17 x18 x19 x20 x21 x22 x23 x24 x25    x26 x27 x28 x29 x30 x31 x32 x33 x34;
  output out=summaryStats mean=MeanVar std=stdVar;
run;

proc sort data=stats;
  by descending MeanVar;
run;

如何将均值转换为变量?或者我怎样才能从最高到最低排序它们?

统计 SAS 线性回归 SAS-宏 mlogit

评论

0赞 Quentin 10/15/2023
请参阅此示例,该示例将 ODS OUTPUT 与 PROC MEANS 结合使用,以在一个变量 support.sas.com/kb/46/427.html 中输出具有所有均值的数据集。之后,您可以使用 PROC SORT 对其进行排序。
0赞 Tom 10/15/2023
您需要将所有变量的均值输出到数据集,而不仅仅是 X1 的均值。

答:

0赞 PBulls 10/15/2023 #1

如果我理解得很好,你有 34 个变量,你想通过它们的手段对它们进行排序。您当前的代码会将所有 34 个均值放在同一条记录上,然后您可以通过数组循环访问该记录。或者,您可以执行以下操作:X1-X34

/* Transpose to long format (or use PROC TRANSPOSE) */
data tpose;
   set stats;
   array arr_x x:;
   do over arr_x;
      VARNUM = sum(VARNUM, 1);
      VARVAL = arr_x;
      output;
   end;
run;

proc sort data=tpose; by varnum; run;

proc means data=tpose mean std;
   by varnum;
   var varval;
   output out=summaryStats mean=meanVar std=stdVar;
run;

/* Put summaryStats VARNUM in order of highest to lowest mean. */
proc sort data=summaryStats; by descending meanVar; run;

如果要重命名变量以按其均值顺序重命名,只需向后转置此数据集即可。您也可以使用 CALL SORT 在单个数据步中完成所有这些操作,但这会稍微复杂一些,特别是如果您想包含其他统计数据,例如标准差。

编辑:哦,您的代码实际上并没有将所有 34 个均值放在同一条记录上,而是将所有 34 个变量汇集到一个均值中。通过为输出变量指定不同的名称来保持它们分开,例如 .output out=summaryStats mean=meanVar1-meanVar34;

0赞 Tom 10/15/2023 #2

只要您想要的统计数据位于集合 N、MiN、MAX、MEAN 和 STD 中,您就可以使用默认的 OUTPUT 数据集格式并对其进行转置,以便您可以按 MEAN 进行排序。

让我们为SASHELP做这件事。CLASS,它应该在所有 SAS 安装中都可用。

proc summary data=sashelp.class;
  var weight height age;
  output out=stats;
run;

proc print;
run;

proc transpose data=stats out=want;
  by _type_ _freq_ ;
  id _stat_;
run;

proc print;
run;

proc sort;
  by mean;
run;

proc print;
run;

结果:

enter image description here

2赞 Richard 10/16/2023 #3

这是根据列均值降序对列重新排序的一种方法。

例:

该选项用于获取可排序形状中每个变量的均值。宏用于存储变量名称,以便它们可以在后续的 DATA 步骤中使用。stackodsoutput

data have;
  call streaminit (20231015);
  do id = 1 to 10;
    array x x1-x34;
    do over x;
      x = _i_ + rand('integer',1, 20);
    end;
    output;
  end;
run;

proc means print data=have std mean stackodsoutput; 
  var x1-x34;
  ods output summary=means;
run;

proc sql noprint;
  select variable into :newcolumnorder separated by ' '
  from means
  order by mean desc;


%put NOTE: &=newcolumnorder;

data want;
  retain id &newcolumnorder;
  set have;
run;

用于根据均值确定新列顺序的中间汇总数据。

enter image description here

以及具有新列排序的结果数据集

enter image description here