楼主: serenaakh
5299 27

这个怎么用 macro rolling 做~ 一天了~ 我还是不会~我就是不开窍~ 拜托帮帮忙~ [推广有奖]

  • 4关注
  • 1粉丝

本科生

90%

还不是VIP/贵宾

-

威望
0
论坛币
7 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
102 点
帖子
115
精华
0
在线时间
77 小时
注册时间
2010-10-14
最后登录
2016-5-30

10论坛币
98.jpg
我的数据 是从1981-2010年的~
我想求 DP cev net_cev sg 的 prior 5的中位数(就是循环求每个企业5年的中位数)所以需要6年以上的data~
比如 code 65170
就是求 1999-2003;2000-2004;2001-2005;2002-2006;
2003-2007;2004-2008;2005-2009 的中位数;
即把求出 2004 2005 2006 2007 2008 2009 2010的数 排序;

这样最后总体的 结果就是 下面这种形式(大概)
date        code         median_dp   median_cev   median_net_cev   median_sg
1986      65170
1986      95300
1986      85310
1987      65170
1987      19260
1987      85310
1987      95300
.....         .......
2009      
2009   
2010    65170
2010    19260
2010    85310

我已经根据(chendonghui1987)这个恩人的方法 把未满六年的企业给删除掉了~
我搞了一天 但是只会5个5个 单独的算~
用macro rolling就可以直接循环的样子~
但是我怎么弄 都弄不出来~
拜托各位帮帮忙~

先谢谢~
感恩~


最佳答案

tianniao 查看完整内容

这个简单 proc sort data=data out=data1; by code6 date; run; proc expand data=data1 out=out; by code6; convert convert dp=med_dp / tout=(movmed 5 trimleft 4); convert convert cev=med_cev / tout=(movmed 5 trimleft 4); convert convert net_cev=med_net_cev / tout=(movmed 5 trimleft 4); convert convert sg=med_sg / tout=(movmed 5 trimleft 4); run; 后面的再处理一下就可以。用这种方法年份 ...
关键词:rolling Macro roll ING Lin 中位数

本帖被以下文库推荐

你生活在一个可以没有我的世界,我居住在一个只有你的天空...
沙发
tianniao 发表于 2012-4-6 16:59:56 |只看作者 |坛友微信交流群
这个简单
proc sort data=data out=data1;
by code6 date;
run;

proc expand data=data1 out=out;
by code6;
convert convert dp=med_dp  / tout=(movmed 5 trimleft 4);
convert convert cev=med_cev   / tout=(movmed 5 trimleft 4);
convert convert net_cev=med_net_cev  / tout=(movmed 5 trimleft 4);
convert convert sg=med_sg  / tout=(movmed 5 trimleft 4);
run;

后面的再处理一下就可以。用这种方法年份不足5年的就直接是 MISSING VALUE ,后续除去就是了

使用道具

藤椅
a--one 发表于 2012-4-6 17:06:16 |只看作者 |坛友微信交流群
帮顶~~

使用道具

板凳
水木羽泉 发表于 2012-4-6 17:28:04 |只看作者 |坛友微信交流群
比较复杂啊

使用道具

报纸
serenaakh 发表于 2012-4-6 19:47:32 |只看作者 |坛友微信交流群
a--one 发表于 2012-4-6 17:06
帮顶~~
感恩~
你生活在一个可以没有我的世界,我居住在一个只有你的天空...

使用道具

地板
serenaakh 发表于 2012-4-6 19:48:17 |只看作者 |坛友微信交流群
水木羽泉 发表于 2012-4-6 17:28
比较复杂啊
是的 啊~
一天了~
啥也没研究出来~
唉~
你生活在一个可以没有我的世界,我居住在一个只有你的天空...

使用道具

7
Bugjay 发表于 2012-4-6 20:52:03 |只看作者 |坛友微信交流群
菜鸟表示不会,帮顶!

使用道具

8
serenaakh 发表于 2012-4-6 20:53:09 |只看作者 |坛友微信交流群
Bugjay 发表于 2012-4-6 20:52
菜鸟表示不会,帮顶!
谢谢~
感恩~
你生活在一个可以没有我的世界,我居住在一个只有你的天空...

使用道具

9
a--one 发表于 2012-4-7 07:45:36 |只看作者 |坛友微信交流群
serenaakh 发表于 2012-4-6 19:47
感恩~
没事啦,只是希望你的问题得到解决!

使用道具

10
mymine 发表于 2012-4-7 21:36:21 |只看作者 |坛友微信交流群
/*按企业名和时间排序*/
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;

/*取各企业年数大于等于5的*/
data b;
set a;
where n1>=5;
run;
/*各企业将该年包含该笔数据的前五笔连接*/
proc sql;
create table c as
select distinct b.*,a.dp as adp,a.date as adate
from b left join a
on b.coname=a.coname and 0<=b.n1-a.n1<5;
quit;
/*取中位数*/
proc means data=c;
by coname date;
class adp;
output out=d median=med;
run;

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-30 20:04