SAS:每个度量*类组合都用一行制表

  • 本文关键字:一行 度量 组合 SAS sas
  • 更新时间 :
  • 英文 :


我正在尝试运行一个PROC TABULATE,以获取跨类变量分开的各种变量的手段(称为brand)。我希望输出出现,以便每种组合的组合是一行。brand 。因此,我可以将输出复制到Excel中,并创建一个与用户共享的枢轴表。该表将是1列x,但是许多行brand*metric生成。

问题是SAS将使用合并表生成嵌套的单元格,因此我无法轻易复制和粘贴输出 - 我必须手动清洁一堆单元。

我在SAS中的知识渊博,因此对任何帮助都受到赞赏。谢谢!

,如果我理解您想要的话,我认为您可以使用PROC UNIVARIATE。让我们将sashelp.cars用作我们的示例数据。我们可以将模型视为您的品牌并获得MPG变量的均值。

proc univariate noprint
  data=sashelp.cars(where=(make=:'H'))
  outtable=stats (keep=make _var_ _label_ _mean_)
;
  class  make ;
  var mpg: ;
run;

结果

Obs     Make         _VAR_          _LABEL_        _MEAN_
 1     Honda      MPG_City       MPG (City)       27.8235
 2     Hummer     MPG_City       MPG (City)       10.0000
 3     Hyundai    MPG_City       MPG (City)       23.0000
 4     Honda      MPG_Highway    MPG (Highway)    34.0000
 5     Hummer     MPG_Highway    MPG (Highway)    12.0000
 6     Hyundai    MPG_Highway    MPG (Highway)    29.9167

注意:Proc Univariate将不允许超过两个类变量。如果您有两个以上的类变量,则可以对源数据进行排序并使用BY语句而不是CLASS语句。

如果您需要类变量的多种组合(Make*Make*Drivetrain等),则可能需要使用PROC摘要。但是,然后您需要将数据集转换为将变量转换为行而不是列。另外,Proc摘要的统计数据以这种简单的输出格式可用的较少,而Proc Univariate的the topable =结果。

%let class_list=make drivetrain ;
%let class_types=() make make*drivetrain ;
%let varlist = mpg: ;
proc summary chartype
  data=sashelp.cars(where=(make=:'H'))
;
  class &class_list ;
  types &class_types ;
  var &varlist ;
  output out=stats(where=(_stat_='MEAN')) ;
run;
proc transpose data=stats out=want;
  by _type_ &class_list ;
  var &varlist ;
  id _stat_;
run;
proc print; run;

结果

                            Drive
Obs    _TYPE_     Make      Train      _NAME_          _LABEL_         MEAN
  1      00                          MPG_City       MPG (City)       25.3000
  2      00                          MPG_Highway    MPG (Highway)    31.6333
  3      10      Honda               MPG_City       MPG (City)       27.8235
  4      10      Honda               MPG_Highway    MPG (Highway)    34.0000
  5      10      Hummer              MPG_City       MPG (City)       10.0000
  6      10      Hummer              MPG_Highway    MPG (Highway)    12.0000
  7      10      Hyundai             MPG_City       MPG (City)       23.0000
  8      10      Hyundai             MPG_Highway    MPG (Highway)    29.9167
  9      11      Honda      All      MPG_City       MPG (City)       19.6667
 10      11      Honda      All      MPG_Highway    MPG (Highway)    23.6667
 11      11      Honda      Front    MPG_City       MPG (City)       30.3077
 12      11      Honda      Front    MPG_Highway    MPG (Highway)    37.0769
 13      11      Honda      Rear     MPG_City       MPG (City)       20.0000
 14      11      Honda      Rear     MPG_Highway    MPG (Highway)    25.0000
 15      11      Hummer     All      MPG_City       MPG (City)       10.0000
 16      11      Hummer     All      MPG_Highway    MPG (Highway)    12.0000
 17      11      Hyundai    Front    MPG_City       MPG (City)       23.0000
 18      11      Hyundai    Front    MPG_Highway    MPG (Highway)    29.9167

您最好的选择是使用ods output将其放入表中,然后使用proc transpose将其制成。PROC TABULATE将制作出看起来不错的东西,不一定对您的特定目的有用。

ods output table=tab_out;
proc tabulate data=sashelp.cars;
  class make;
  var mpg_city mpg_highway;
  tables make*(mpg_city mpg_highway),mean;
run;
ods output close;
proc transpose data=tab_out out=tab_trans;
  by make;
  var mpg_:;
run;

使用PROC MEANS,如果您是9.3 ,则可以跳过转置,并且可以使用STACKODSOUTPUT选项;没有该(在较旧版本中)只需删除该选项,然后进行转置:

ods output summary=means_out;
proc means data=sashelp.cars mean stackodsoutput;
  class make;
  var mpg_city mpg_highway;
run;
ods output close;

最新更新