楼主: juno嗅嗅
2812 2

[问答] sas删除特定条件数据记录 [推广有奖]

  • 1关注
  • 0粉丝

本科生

45%

还不是VIP/贵宾

-

威望
0
论坛币
25 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
695 点
帖子
57
精华
0
在线时间
104 小时
注册时间
2011-11-9
最后登录
2020-8-13

楼主
juno嗅嗅 发表于 2016-5-30 19:56:03 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
我有一些数据如下:

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代码编程,谢谢!
二维码

扫码加我 拉你入群

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

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

关键词:数据记录 sas代码 date con ATE 记录

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

藤椅
juno嗅嗅 发表于 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也可以达到目的,不过没有运行过

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-25 19:14