全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2307 15
2013-01-17
数据抽象如下:
data have;
_obs ++1;
input id dt :date9.;
format dt date9.;
cards;
0 31oct2011
1 31jan2010
1 30apr2010
1 31oct2010
1 31jan2011
1 30apr2011
1 31jul2011
1 31jan2012
2 31jan2010
2 31jan2011
2 30apr2011
2 31oct2011
3 31oct2011
;
问题是:

数据按照季度更新(每三个月的最后一天).数据已经按照ID和DT顺序排列.注意:每三个月的更新叫做连续更新.
要求是:
1.如果某个ID里,有至少一个三个或以上连续更新的数据(比如ID=1,从31OCT2010到31JUL2011的连续4次更新),那取出第一个连续更新的前三个记录(只需要这连续排列的前三个记录)--如ID=1所示;
2.如果三个或以上的连续记录不存在,取第一个有连续两个更新的记录--如ID=2所示.
3.否则,去掉该ID--如ID=0和3所示.
问题的来源是:我们只需要这样的数据来做模型.

另外请不要经常SORT数据.因为我们的实际数据大概是一百万的ID,每个ID的可能更新次数从1到1000.数据包含大概50个变量.

京剧

结果 results:

Obs _obs id dt
1   4    1 31OCT2010
2   5    1 31JAN2011
3   6    1 30APR2011
4  10    2 31JAN2011
5  11    2 30APR2011

二维码

扫码加我 拉你入群

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

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

全部回复
2013-1-17 09:44:43
Try this:
复制代码
二维码

扫码加我 拉你入群

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

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

2013-1-17 10:22:07
pobel 发表于 2013-1-17 09:44
Try this:
very smart code.
let‘s say, records from 10,000 to 19,999, you need a length of mv about 10000*5+10000-1 =59999. in fact,i have about 4,800,000 records, not considering more upcoming records with the next update.
京剧
二维码

扫码加我 拉你入群

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

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

2013-1-17 10:22:35
pobel 发表于 2013-1-17 09:44
Try this:
大概看明白了
能不能先求两个Lead
然后每个观测在三个日期变量上做判断
导出符合条件的观测就好了,即时间间隔各差3个月
这里唯一体现复杂度的就是求两个Lead吧
在SAS里没有Lead函数,只能有proc expand,速度好像不快
二维码

扫码加我 拉你入群

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

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

2013-1-17 10:29:47
playmore 发表于 2013-1-17 10:22
大概看明白了
能不能先求两个Lead
然后每个观测在三个日期变量上做判断
what do you mean "lead"?
二维码

扫码加我 拉你入群

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

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

2013-1-17 10:35:00
jingju11 发表于 2013-1-17 10:22
very smart code.
let‘s say, records from 10,000 to 19,999, you need a length of mv about 10000 ...
If the macro-variable way is not doable, you can generate a dataset with one variable "_obs" which contains the number of observation you need. Then merge it back to the original dataset by _obs.

That is, at the last.id, output the needed obs to the variable _obs. (It's easy for you to do that.)

Hope you know what I mean.
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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