【发布时间】:2017-08-01 21:29:40
【问题描述】:
我的数据看起来像这样:
身份证测试日期
001 A 2011 年 9 月 1 日
001 A 2011 年 10 月 2 日
001 A 2012 年 9 月 12 日
001 A 10/10/2013
001 B 10/1/2011
001 B 1/1/2012
002 A 10/12/2014
002 A 10/13/2014
002 A 2/2/2015
002 A 11/15/2015
我想做的是读取ID/Test的第一条记录,然后将其与同一ID/Test的下一条记录进行比较。如果该测试日期不是至少 365 天后,则将其删除。然后重新测试下一条记录。如果至少晚了 365 天,那么我将保留它,并在该 ID/测试组中将其用作新的比较日期,以用于下一个记录。但是每个 ID/Test 组合都有不同数量的记录和日期。
我希望它最终是这样的:
身份证测试日期
001 A 2011 年 9 月 1 日
001 A 2012 年 9 月 12 日
001 A 10/10/2013
001 B 10/1/2011
002 A 10/12/2014
002 A 2015 年 11 月 15 日
感谢您的帮助 -
ETA:我尝试过的代码:
数据需要;设置有; 滞后=滞后(ID);滞后=滞后(测试); lagdate=lag(日期):
如果 id=lagid AND test=lagtest 那么 days=date-lagdate;
如果 1 le 天 le 365 则删除;
运行;
此代码仅适用于彼此相邻的对。在我的示例数据中,它会给我错误的结果 -
身份证测试日期
001 A 2011 年 9 月 1 日
001 A 2013 年 10 月 10 日
001 B 2011 年 10 月 1 日
002 A 2014 年 10 月 12 日
ETA:我找到了使用 RETAIN 并通过 ID 和测试设置的解决方案。
【问题讨论】:
-
你试过什么?你能显示一些代码吗?
-
我想通了 - 最终使用 RETAIN 语句来比较日期,然后当我到达我想要保留的记录时更新保留的变量。
标签: sas