全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
2811 2
2016-05-30
我有一些数据如下:

id   date     cond
1   2005     ch
1   2006     ca
1   2007     bk
1   2008     bk
2   2005    bk
2   2006    ch
2   2007    bk

同一id下的记录按时间升序排列,如果相同id第一条记录的cond="bk",则不处理 ,否则在"bk"之前的数据记录删除,直到同一id下的第一条记录为"bk",得到如下结果:
id   date     cond
1   2007     bk
1   2008     bk
2   2005     bk
2   2006     ch
2   2007     bk
需要用sas代码编程,谢谢!
二维码

扫码加我 拉你入群

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

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

全部回复
2016-6-1 03:18:20
关键就是要得到一个id+date的范围,建议先用proc sql, group by id+level, 然后min, max得到obs的范围,然后再join回去原始数据,最后再用if对行数判断即可。
二维码

扫码加我 拉你入群

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

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

2016-6-1 21:48:19
proc sort data=raw_data;
by id date;
run;
data new_data;
set raw_data;
by id date;
if first.id and cond^="bk" then  bisbk=0;
if first.id and cond="bk" then bisbk=1;
if not first.id and cond="bk" then bisbk=1;
if bisbk=0 then delete;
run;
我认为这样用retain 和 first也可以达到目的,不过没有运行过
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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