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
和标准错误?我试着玩这个,但没能让它工作。