全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1203 6
2016-04-26
悬赏 5 个论坛币 已解决
求教:现有数据
id         year       entry  
1          2002        0
1          2003        1
1          2004        0
1          2005        0
1          2006        1
1          2007        0
1          2008        0
1          2009        0
如以上原始数据,每个个体Id 对应着不同的时间和entry值,entry的取值可能为0或1(先出现0后出现1)。
想进行数据筛选。删去entry取0,但后面没有1的那些观测值。以上数据的结果为:
id         year       entry  
1          2002        0
1          2003        1
1          2004        0
1          2005        0
1          2006        1


最佳答案

lyfyb99 查看完整内容

data test; input id year entry ; cards; 1 2002 0 1 2003 1 1 2004 0 1 2005 0 1 2006 1 1 2007 0 1 2008 0 1 2009 0 2 2002 0 2 2003 1 2 2004 0 2 2005 0 2 2006 1 2 ...
二维码

扫码加我 拉你入群

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

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

全部回复
2016-4-26 10:00:46

data test;
input id   year     entry  ;
cards;
1          2002        0
1          2003        1
1          2004        0
1          2005        0
1          2006        1
1          2007        0
1          2008        0
1          2009        0
2          2002        0
2          2003        1
2          2004        0
2          2005        0
2          2006        1
2          2007        0
2          2008        1
2          2009        0
;
run;

proc sort data=test; by id descending year; run;

data test01;
set test;
by id descending year;
retain flag;
if first.id then flag=.;
if entry=1 then flag=1;
run;

proc sort data=test01 out=test02; by id year; where flag=1; run;
二维码

扫码加我 拉你入群

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

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

2016-4-26 10:48:00
求帮助
二维码

扫码加我 拉你入群

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

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

2016-4-26 10:48:46
2004那条观测应该也没有吧。我觉得可以用lag函数,lag值小于当前值的条件不就是你想要的数据吗
二维码

扫码加我 拉你入群

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

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

2016-4-26 12:26:27
yzhch2010bsh 发表于 2016-4-26 10:48
2004那条观测应该也没有吧。我觉得可以用lag函数,lag值小于当前值的条件不就是你想要的数据吗
2004那条观测值是有的。只要后面有1,就保留前面的所有0.所以,不能用lag呢
二维码

扫码加我 拉你入群

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

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

2016-4-26 13:16:58
初学者,供参考:
proc sql;
        select sum(entry) into :max
        from a;
quit;
data b;
        set a;
        retain x;
        x+entry;
        if x=&max and entry=0 then delete;
        drop x;
run;
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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