全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1594 13
2016-04-19
悬赏 5 个论坛币 已解决
请教各位:
id        t                v
1        2000         1
1        2001         2
1        2002         0
1        2003         0
1        2004         3
1        2005         4
1        2006         0
1        2007         5
1        2008         6
1        2009         7
1        2010         8
2        2000         9
2        2001         10
2        2002         11
2        2003         12
2        2004         0
2        2005         0
2        2006         13
2        2007         14
2        2008         15
2        2009         0
2        2010         16
以上数据,v变量取值有0,我想以此形成两个新的数据集:
第一个,保留每个个体中,v取0(连续取0时的第一个)且其前面的数据(直到v再次取0),就以上数据来说,在个体1中,2002年v取0,所以保留2000-2002的数据,2006年v再次取0,保留2004-2006的数据;在个体2中,2004年v取0,保留2000-2004的数据,2009年再次取0,保留2006-2009的数据,所以想得到的数据集为:
id        t                v
1        2000         1
1        2001         2
1        2002         0
1        2004         3
1        2005         4
1        2006         0
2        2001         10
2        2002         11
2        2003         12
2        2004         0
2        2006         13
2        2007         14
2        2008         15
2        2009         0
第二个数据集,保留v取0且后面不取0的第一个数据,例如,个体1,2002和2003年v取0,所以保留2002-2004的数据,2006年v再次取0,保留2006和2007的数据;个体2,2004和2005年v取0,所以保留2004-2006的数据,2009年再次取0,保留2009和2010的数据,所以想得到的数据为:
id        t                v
1        2002         0
1        2003         0
1        2004         3
1        2006         0
1        2007         5
2        2004         0
2        2005         0
2        2006         13
2        2009         0
2        2010         16
可以分两次得到数据,非常感谢!

最佳答案

lyfyb99 查看完整内容

data test; input id t v; cards; 1 2000 1 1 2001 2 1 2002 0 1 2003 0 1 2004 3 1 2005 4 1 2006 0 1 2007 5 1 2008 6 1 2009 7 1 2010 8 2 2000 9 2 2001 10 2 2002 11 2 20 ...
二维码

扫码加我 拉你入群

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

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

全部回复
2016-4-19 10:09:35
data test;
input id  t  v;
cards;
1        2000         1
1        2001         2
1        2002         0
1        2003         0
1        2004         3
1        2005         4
1        2006         0
1        2007         5
1        2008         6
1        2009         7
1        2010         8
2        2000         9
2        2001         10
2        2002         11
2        2003         12
2        2004         0
2        2005         0
2        2006         13
2        2007         14
2        2008         15
2        2009         0
2        2010         16
   ;
run;


**get first dataset;
proc sort data=test; by id t v; run;

data test01;
set test;
by id t v;
prev=lag(v);
run;

proc sort data=test01; by id descending t v; run;

data test02;
set test01;
by id descending t v;
retain flag;
if first.id then flag=.;
if v=0 then flag=1;
if not last.id then do;
if v=0 and prev=0 then delete;
end;
run;

proc sort data=test02 out=data1; by id t v; where flag=1; run;

**get second dataset;

data data2;
set test;
by id t v;
prev=lag(v);
if v=0 or prev=0;
run;
二维码

扫码加我 拉你入群

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

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

2016-4-19 11:36:57
自己顶
二维码

扫码加我 拉你入群

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

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

2016-4-19 12:19:59
你这个是按照id分别计算条件的吗?

如果个体2中第一个观测为0,个体1最后一个观测不为0,算是符合条件的吗?
二维码

扫码加我 拉你入群

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

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

2016-4-19 12:20:22
哪位大神过来帮帮忙吧
二维码

扫码加我 拉你入群

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

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

2016-4-19 12:24:35
guanglei 发表于 2016-4-19 12:19
你这个是按照id分别计算条件的吗?

如果个体2中第一个观测为0,个体1最后一个观测不为0,算是符合条件的 ...
是按Id计算的。
每个个体的第一观测值不会为0,这是数据自身的特征。
但个体1最后一个观测值不为0,不符合条件,多谢!
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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