SAS中文论坛

标题: proc means输出问题 [打印本页]

作者: shiyiming    时间: 2009-12-21 11:25
标题: 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里面可以直接输出成这种格式吗?谢谢!
作者: shiyiming    时间: 2009-12-21 13:38
标题: 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]
作者: shiyiming    时间: 2009-12-21 16:53
标题: Re: proc means输出问题
谢谢啊!我在proc means 后面加了一个nonobs的命令,在output那里看着是我要的格式了,但是一用ods输出就又变成横着一行了,:(

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

貌似proc tablulate可以,但是我没有找到输出median的。
作者: shiyiming    时间: 2009-12-21 22:29
标题: Re: proc means输出问题
个人感觉tanzhen_mysas的答案很好。即使对于很多个变量的情况也可行,只是加大array的维度而已。如果不想sort,用nway+class可以得到同样的结果。另外如果只是输出的话,直接可用listingWindows或者ODS的输出,即是你所需要的形式。我觉得这个问题很简单,没有必要话很多时间去找新方法。
作者: shiyiming    时间: 2009-12-23 12:53
标题: Re: proc means输出问题
Google这篇文章吧,059-31 A Better Means — The ODS Data Trap.pdf  ,上面提供了一个很灵活的Macro来实现你要的功能。
作者: shiyiming    时间: 2010-2-24 23:19
标题: Re: proc means输出问题
这个macro看着真晕啊,最后我是分别输出N, mean, min, max等,然后每个文件都transpose,最后再merge的。如果要输出的项目多的话就会比较麻烦,不过只是variable多倒是没问题。
作者: shiyiming    时间: 2010-2-25 14:37
标题: 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]
作者: shiyiming    时间: 2010-2-26 12:58
标题: Re: proc means输出问题
咣当,居然如此简单!!!
作者: shiyiming    时间: 2010-2-28 21:46
标题: Re: proc means输出问题
to lqq316

这个也有问题,proc means data=bb n  mean std min max;
这样输出的时候只能输出这5个参数,如果加上median等等别的就没法输出了。
作者: shiyiming    时间: 2010-3-2 14:09
标题: 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]
作者: shiyiming    时间: 2010-3-3 09:36
标题: Re: proc means输出问题
Here is a working but awkward approach. Essentially it's nothing new but pretty much borrowing the ideas from the posts in the above. I'm also expecting an elegant way of achieving this to show up. <!-- s:-) --><img src="{SMILIES_PATH}/icon_smile.gif" alt=":-)" title="Smile" /><!-- s:-) -->

[code:orb67fo6]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;

%macro means(in =, vars =, metrics =, out =);
  proc means data = &amp;in&#46; noprint;
    var &amp;vars&#46;;
    output out = &amp;out&#46; (drop=_type_ _freq_)
           &amp;metrics&#46; /autoname;
  run;

  proc transpose data = &amp;out&#46;
                 out = &amp;out&#46;(rename = (_name_ = formerVar
                                       col1 = value
                                      )
                            );
  run;

  data &amp;out&#46;(drop = formerVar);
    set &amp;out&#46;;
    variable = scan(formerVar, 1, '_');
    metric = scan(formerVar, 2, '_');
  run;

  proc sort data = &amp;out&#46;;
    by variable;
  run;

  proc transpose data = &amp;out&#46;
                 out = &amp;out&#46;(drop = _name_);
    by variable;
    id metric;
    var value;
  run;
%mend means;

%means(in = bb, vars = %nrstr(var1-var4), metrics = %nrstr(mean= N= std= min= max= median=), out = summary);

[/code:orb67fo6]
作者: shiyiming    时间: 2010-3-10 10:08
标题: Re: proc means输出问题
muhahaha,这个最赞!




欢迎光临 SAS中文论坛 (http://www.mysas.net/forum/) Powered by Discuz! X3.2