SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 2857|回复: 11
打印 上一主题 下一主题

proc means输出问题

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2009-12-21 11:25:07 | 只看该作者

proc means输出问题

我的程序如下:
proc means data=bb noprint;
        var var1 var2 var3 var4;
        output out=bbsum (drop=_type_ _freq_)
        mean= N= std= min= max= /autoname; run;

输出的文件是一横行,即var1_mean var2_mean var3_mean ......

我想输出成下列格式:
var  N mean std min max
var1.. .. .. .. ..
var2...
var3...
var4...

在proc means里面可以直接输出成这种格式吗?谢谢!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2009-12-21 13:38:59 | 只看该作者

Re: proc means输出问题

好像不行哦,我用ods output也试了一次,结果也是横着的。有个解决办法就是把你的四个变量的数据都先转换为竖的,然后再进行输出。
[code:1xqymy0s]data bb;
        input var1-var4;
        datalines;
1 2 3 4
1 2 3 4
1 2 3 4
5 6 4 8
8 5 9 3
7 5 8 7
3 4 9 8
5 2 4 6
;
run;

data bbtmp;
        set bb;
        array test(*) var1-var4;
        do i=1 to dim(test);
                var=vname(test(i));
                value=test(i);
                output;
        end;
run;
proc sort data=bbtmp;
by var;
run;

ods trace on;
ods output Summary=bbsum_;
/*proc means data=bb ;*/
/*        var var1 var2 var3 var4; */
/*        output out=bbsum (drop=_type_ _freq_) */
/*        mean= N= std= min= max= /autoname;*/
/*run;*/
proc means data=bbtmp;
        var value;
        by var;
        output out=bbsum (drop=_type_ _freq_)
        mean= N= std= min= max= /autoname;
run;
ods output close;
ods trace off;

[/code:1xqymy0s]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2009-12-21 16:53:15 | 只看该作者

Re: proc means输出问题

谢谢啊!我在proc means 后面加了一个nonobs的命令,在output那里看着是我要的格式了,但是一用ods输出就又变成横着一行了,:(

因为我不止4个var啊,我看看transpose是否可行吧。

貌似proc tablulate可以,但是我没有找到输出median的。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2009-12-21 22:29:19 | 只看该作者

Re: proc means输出问题

个人感觉tanzhen_mysas的答案很好。即使对于很多个变量的情况也可行,只是加大array的维度而已。如果不想sort,用nway+class可以得到同样的结果。另外如果只是输出的话,直接可用listingWindows或者ODS的输出,即是你所需要的形式。我觉得这个问题很简单,没有必要话很多时间去找新方法。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2009-12-23 12:53:18 | 只看该作者

Re: proc means输出问题

Google这篇文章吧,059-31 A Better Means — The ODS Data Trap.pdf  ,上面提供了一个很灵活的Macro来实现你要的功能。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2010-2-24 23:19:30 | 只看该作者

Re: proc means输出问题

这个macro看着真晕啊,最后我是分别输出N, mean, min, max等,然后每个文件都transpose,最后再merge的。如果要输出的项目多的话就会比较麻烦,不过只是variable多倒是没问题。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2010-2-25 14:37:26 | 只看该作者

Re: proc means输出问题

[code:3r3aw9wd]data bb;
   input var1-var4;
   datalines;
1 2 3 4
1 2 3 4
1 2 3 4
5 6 4 8
8 5 9 3
7 5 8 7
3 4 9 8
5 2 4 6
;
run;
proc means data=bb n  mean std min max;
var var1 - var4;
output out=xx(drop=_type_ _freq_);
run;

proc transpose data=xx out = x;
id _STAT_;
run;

proc print data=x nnobs;run;[/code:3r3aw9wd]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2010-2-26 12:58:51 | 只看该作者

Re: proc means输出问题

咣当,居然如此简单!!!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
9#
 楼主| 发表于 2010-2-28 21:46:17 | 只看该作者

Re: proc means输出问题

to lqq316

这个也有问题,proc means data=bb n  mean std min max;
这样输出的时候只能输出这5个参数,如果加上median等等别的就没法输出了。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
10#
 楼主| 发表于 2010-3-2 14:09:44 | 只看该作者

Re: proc means输出问题

如果做report 输到EXcel就够了的话 用ods html file ="...xls";然后proc means就行了。 硬要做sas dataset出来 下边这code可以用 不过感觉很stupid。呵呵

[code:h0g2ka8q]data bb;
   input var1-var4;
   datalines;
1 2 3 4
1 2 3 4
1 2 3 4
5 6 4 8
8 5 9 3
7 5 8 7
3 4 9 8
5 2 4 6
;
run;

%let var_list =var1-var4 ;
proc means data=bb n  mean median std min max;
var &var_list.;
output out=xx1(drop = _type_ _freq_);
run;

proc transpose data=xx1 out = x1;
id _STAT_;
run;

proc means data=bb n  mean median std min max;
var  &var_list.;
output out=xx2 (drop = _type_ _freq_) median =;
run;
proc transpose data=xx2 out=x2(rename =(col1=MEDIAN)); run;

data x;
set x1;
set x2;
run;

proc print data=x noobs;
var _NAME_ n mean median min max;
run;
[/code:h0g2ka8q]
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-3-3 17:24 , Processed in 0.072676 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表