SAS:为每个度量*类组合列出一行

SAS:为每个度量*类组合列出一行,sas,Sas,我正在尝试运行一个PROC tablate,以获取跨类变量(称为brand)拆分的各种变量的平均值。我希望输出结果是,每个度量值和品牌组合都有一行。这样我就可以将输出复制到Excel中,并创建一个数据透视表与用户共享。该表将为1列X,但会生成多行brand*metric 问题是SAS将生成带有合并表的嵌套单元格,因此我无法轻松复制和粘贴输出——我必须手动清理一堆单元格 我对SAS不是很了解,所以非常感谢您的帮助。谢谢 您的最佳选择是使用ods output将其放入表中,然后使用proc tran

我正在尝试运行一个
PROC tablate
,以获取跨类变量(称为
brand
)拆分的各种变量的平均值。我希望输出结果是,每个度量值和品牌组合都有一行。这样我就可以将输出复制到Excel中,并创建一个数据透视表与用户共享。该表将为1列X,但会生成多行
brand*metric

问题是SAS将生成带有合并表的嵌套单元格,因此我无法轻松复制和粘贴输出——我必须手动清理一堆单元格


我对SAS不是很了解,所以非常感谢您的帮助。谢谢

您的最佳选择是使用
ods output
将其放入表中,然后使用
proc transpose
使其符合您的需要
PROC tablate
将使某些东西看起来很漂亮,而不一定对您的特定用途有用

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意味着
如果您是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;

如果我理解您的要求,我想您可以使用
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单变量不允许超过两个类变量。如果有两个以上的类变量,则可以对源数据进行排序,并使用
BY
语句而不是
class
语句。


如果您需要类变量的多个组合(MAKE*DRIVETRAIN等),那么您可能希望使用PROC SUMMARY。但随后需要转换数据集,将变量转换为行而不是列。加上PROC SUMMARY在这种简单输出格式中可用的统计信息比OUTTABLE=PROC单变量结果中可用的统计信息少得多

%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

如果我只是用proc的意思呢?我很乐意这样做。是否有一个使用proc方法然后转置所有内容的工作流?
制表在这种情况下似乎同样简单?当然,
proc意味着
将给出几乎相同的结果。完成。实际上,在9.3+中使用
STACKODSOUTPUT
会稍微容易一些。我尝试了两种解决方案,但问题仍然存在--
Make
单元格被合并,因此当我将其复制到Excel时,我会遇到同样的问题。不要使用屏幕上的输出。使用生成的数据集,然后打印或导出它或您拥有的其他内容。请给出一个示例。什么是“公制”?你的意思是你想要生成平均值的分析变量吗?这实际上非常有效!我将如何进行课程组合?例如,假设我想结合
make
driveTrain
来查看结果。我还能看到
make
的总体级别吗?如果需要两个以上的类变量,你会怎么做?似乎SAS有一个限制。如果您需要类变量的多个组合,那么您需要多次调用它。此时,您可能希望改用proc summary。当我尝试3个类变量时,我得到以下错误:错误:不能指定两个以上的类变量。我如何保持平均值的
n
标准错误?我试着玩这个,但没能让它工作。