全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
4689 5
2017-07-14
悬赏 20 个论坛币 已解决
有一批记录,格式及特征如下:
复制代码
要求:
ID值相同情况下(比如ID=001),cish相邻两次记录(比如记录1及记录2,记录3及记录4)为一组数据,如果相同ID值下,两组数据最最近的时间(date)大于365天的,归于数据集A(比如ID=001的第2条及第3条),如果小于[size=14.3999996185303px]365天的,归于数据集B(比如ID=002的第2条及第3条,ID=003的[size=14.3999996185303px]第2条及第3条[size=14.3999996185303px])
[size=14.3999996185303px]

怎样实现?谢谢。

[size=14.3999996185303px]

最佳答案

albusdzx 查看完整内容

想了个不是很简便的办法 抛砖引玉 data test; input ID $ cish date yymmdd10.; datalines; 001 1 2010/01/02 001 2 2010/05/12 001 1 2011/06/02 001 2 2011/10/12 002 1 2010/01/02 002 2 2010/05/12 002 1 2011/02/02 002 2 2011/06/12 003 1 2010/10/02 003 2 2011/02/12 003 1 2012/06/02 003 2 2012/10/12 ; data test; set test; by ID; lag=dif(date); if first.ID then lag=.; run; proc sq ...
二维码

扫码加我 拉你入群

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

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

全部回复
2017-7-14 16:49:39
想了个不是很简便的办法 抛砖引玉
data test;
input ID $  cish  date yymmdd10.;
datalines;
001 1 2010/01/02
001 2 2010/05/12
001 1 2011/06/02
001 2 2011/10/12
002 1 2010/01/02
002 2 2010/05/12
002 1 2011/02/02
002 2 2011/06/12
003 1 2010/10/02
003 2 2011/02/12
003 1 2012/06/02
003 2 2012/10/12
;

data test;
set test;
by ID;
lag=dif(date);
if first.ID then lag=.;
run;

proc sql;
create table a as
select * from test where id  in (select ID from test where lag>365);
create table b as
select * from test where id not in (select ID from test where lag>365);
quit;
二维码

扫码加我 拉你入群

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

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

2017-7-15 12:16:59
需要滚动归集嘛?
exmple:

第一次比较:
001  1   2010/01/02
001  2   2010/05/12

第二次比较:
001  2   2010/05/12
001  1   2011/06/02

第三次比较:
001  1   2011/06/02
001  2   2011/10/12
二维码

扫码加我 拉你入群

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

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

2017-7-15 21:12:46
大片阳光因你 发表于 2017-7-15 12:16
需要滚动归集嘛?
exmple:
要的,其实cish=1与cish=2是一组,其相差时间应该小于365天的,现在想判断同样ID内第1组的cish=2与第2组的cish=1之间相差的时间,如果相差时间>365天的,ID相同的记录均归于数据集A,否则归于数据集(B如ID=002的4条记录),分多次比较都可以。
二维码

扫码加我 拉你入群

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

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

2017-7-16 13:15:11
大片阳光因你 发表于 2017-7-15 12:16
需要滚动归集嘛?
exmple:
其实,可以生产一个时间变量比如time,time的值是相同ID内按cishu由小到大排序后循环相减的得到,在这里,ID=001的第一条记录的time没有数字,第二、第三、第四条记录的time值分别是第二减第一、第三减第二、第四减第三的结果,然后判断time是否大于365,有归A数据集,这怎样实现?
二维码

扫码加我 拉你入群

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

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

2017-7-17 16:33:56
albusdzx 发表于 2017-7-14 16:49
想了个不是很简便的办法 抛砖引玉
data test;
input ID $  cish  date yymmdd10.;
谢谢,就是想要这效果。
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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