我正在尝试运行一个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;