全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1889 5
2012-04-05
96.jpg
我想用proc means求DP,cev, net_cev, sg的中位数,
但不是单纯的求,是求每个企业前五年的中位数,再把这些中位数排序(从大到小)
所以样本企业必须要六年以上,
怎么能把 未满六年的企业给 去除~
但是还能把去除的企业保存在另一个文件里~

我的数据 应该是1981到2010年间的,但是由于很多公司不是从那么早开始建立的,
所有 各个企业 从各个年度开始的都有~
我以我不会弄~
拜托各位高手了~

先谢谢~~
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2012-4-6 10:05:16

options mlogic mprint symbolgen source;

data a;
        input coname $ code6 $ date dp cev net_cev age sg;
        datalines;
1 90470 2004 13.001 252.0 252.063 15 23.5
1 90470 2005 13.001 252.0 252.063 15 23.5
1 90470 2006 13.001 252.0 252.063 15 23.5
1 90470 2007 13.001 252.0 252.063 15 23.5
1 90470 2008 13.001 252.0 252.063 15 23.5
1 90470 2009 13.001 252.0 252.063 15 23.5
1 90470 2010 13.001 252.0 252.063 15 23.5
2 90471 2003 13.001 252.0 252.063 15 23.5
2 90471 2004 13.001 252.0 252.063 15 23.5
2 90471 2005 13.001 252.0 252.063 15 23.5
2 90471 2006 13.001 252.0 252.063 15 23.5
2 90471 2007 13.001 252.0 252.063 15 23.5
2 90471 2008 13.001 252.0 252.063 15 23.5
2 90471 2009 13.001 252.0 252.063 15 23.5
2 90471 2010 13.001 252.0 252.063 15 23.5
3 90472 2003 13.001 252.0 252.063 15 23.5
3 90472 2004 13.001 252.0 252.063 15 23.5
3 90472 2005 13.001 252.0 252.063 15 23.5
3 90472 2006 13.001 252.0 252.063 15 23.5
3 90472 2007 13.001 252.0 252.063 15 23.5
3 90472 2008 13.001 252.0 252.063 15 23.5
4 90473 2003 13.001 252.0 252.063 15 23.5
4 90473 2004 13.001 252.0 252.063 15 23.5
5 90474 2003 13.001 252.0 252.063 15 23.5
5 90474 2004 13.001 252.0 252.063 15 23.5
5 90474 2005 13.001 252.0 252.063 15 23.5
5 90474 2006 13.001 252.0 252.063 15 23.5
5 90474 2007 13.001 252.0 252.063 15 23.5
5 90474 2008 13.001 252.0 252.063 15 23.5
;
run;



proc sql noprint;
        /*企业数据要在6年到6年以上的*/
        create table work.b as
                select t.*,count(t.coname) as cnt
                from work.a as t
                group by t.coname
                having cnt >= 6
                order by t.coname,t.date;
               
        /*企业数据不到6年的*/
        create table work.c as
                select t.* ,count(t.coname) as cnt
                from work.a as t;
                group by t.coname
                having cnt < 6
                order by t.coname,t.date;

quit;

/*中位数*/
proc means data = work.b noprint  chartype qmethod=os nonobs median ;
        var Dp cev net_cev sg;
        output out=work.d median()=
                / autoname autolabel inherit;
run;

/*转置为了排序*/
proc transpose data = work.d out = work.e;
        var Dp_median cev_median net_cev_median sg_median;
run;
quit;

/*排序*/
proc sql noprint;
        create table work.f as
                select _name_,col1
                from work.e
                order by col1;
quit;

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-4-6 10:06:28
数据集work.c是过滤掉的数据,你可以用sas导出就行了
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-4-6 10:07:39
希望对你有所帮助,不过还是应该你看会了,自己不看代码,凭着自己的理解去写,这样对你提高会有很大帮助.
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-4-6 10:21:16
chendonghui1987 发表于 2012-4-6 10:06
数据集work.c是过滤掉的数据,你可以用sas导出就行了
感恩~感恩~
您帮我太多了~
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-4-6 10:23:38
chendonghui1987 发表于 2012-4-6 10:06
数据集work.c是过滤掉的数据,你可以用sas导出就行了
太感恩了~
就是不会弄 过滤掉的这一步
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群