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

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

先谢谢~~

最佳答案

mymine 查看完整内容

也可以,我不习惯用means而已 修改如下 /*按企业名和时间排序*/ proc sort data=a; by coname date; run; /*将各企业按时间计数*/ data a; set a; by coname date; if first.coname then n1=1; else n1+1; run; /*计算各企业的最大笔数*/ proc sql; create table b as select distinct *,max(N1) as nn from a group by coname; quit; /*取最大笔数大于5的前5年数据*/ proc sql; create table c as selec ...
二维码

扫码加我 拉你入群

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

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

全部回复
2012-4-6 07:03:16
也可以,我不习惯用means而已
修改如下
/*按企业名和时间排序*/
proc sort data=a;
by coname date;
run;
/*将各企业按时间计数*/
data a;
set a;
by coname date;
if first.coname then n1=1;
else n1+1;
run;
/*计算各企业的最大笔数*/
proc sql;
create table b as
select distinct *,max(N1) as nn
from a group by coname;
quit;

/*取最大笔数大于5的前5年数据*/
proc sql;
create table c as
select *
from b
where nn>5 and n1<6;
quit;
/*求中位数*/
proc means data=c;
var dp;
by coname;
output out=d median=med;
run;
二维码

扫码加我 拉你入群

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

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

2012-4-6 08:29:01
如果只求前五年的中位数,那就简单了
以DP为例,将前五年的数据排序,取第三行的就是中位数了

/*按企业名和时间排序*/
proc sort data=a;
by coname date;
run;
/*将各企业按时间计数*/
data a;
set a;
by coname date;
if first.coname then n1=1;
else n1+1;
run;
/*计算各企业的最大笔数*/
proc sql;
create table b as
select distinct *,max(N1) as nn
from a group by coname;
quit;

/*取最大笔数大于5的前5年数据*/
proc sql;
create table c as
select *
from b
where nn>5 and n1<6;
quit;
/*按企业名和DP排序*/
proc sort data=c;
by coname dp;
run;
/*各企业分类计数*/
data c;
set c;
by coname dp;
if first.coname then n2=1;
else n2+1;
run;
/*去第三笔即为中位数*/
data d;
set c;
where n2=3;
drop n1 n2;
run;
二维码

扫码加我 拉你入群

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

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

2012-4-6 08:29:33
如果只求前五年的中位数,那就简单了
以DP为例,将前五年的数据排序,取第三行的就是中位数了

/*按企业名和时间排序*/
proc sort data=a;
by coname date;
run;
/*将各企业按时间计数*/
data a;
set a;
by coname date;
if first.coname then n1=1;
else n1+1;
run;
/*计算各企业的最大笔数*/
proc sql;
create table b as
select distinct *,max(N1) as nn
from a group by coname;
quit;

/*取最大笔数大于5的前5年数据*/
proc sql;
create table c as
select *
from b
where nn>5 and n1<6;
quit;
/*按企业名和DP排序*/
proc sort data=c;
by coname dp;
run;
/*各企业分类计数*/
data c;
set c;
by coname dp;
if first.coname then n2=1;
else n2+1;
run;
/*取第三笔即为中位数*/
data d;
set c;
where n2=3;
drop n1 n2;
run;
二维码

扫码加我 拉你入群

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

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

2012-4-6 08:33:24
如果不限定是前5年取中位数,就是说年数不定的话
可在proc sql中自己写公式,稍微复杂
二维码

扫码加我 拉你入群

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

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

2012-4-6 08:40:30
mymine 发表于 2012-4-6 08:29
如果只求前五年的中位数,那就简单了
以DP为例,将前五年的数据排序,取第三行的就是中位数了
不能直接求各个企业前五年的 中位数
然后再把这些中位数从大到小 排序吗?
(恕我愚钝~问的问题白痴 也不要嘲笑噻~)
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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