我正在尝试识别在90天内执行三项或更多服务的ID。 我有列:服务日期,ID,服务和其他类型的人口统计信息。 你能帮帮我吗?
谢谢!
答案 0 :(得分:0)
草拟一种可能的解决方案:
这可能会多次为您提供一些ID,但您可以通过第二次传递轻松删除任何重复项,或者如果输出当前ID,则跳过下一个ID。
以下是使用DOW-loop进行的尝试 - 我认为这样做可以满足我在下面使用的示例数据。如果您发现任何不能按预期工作的情况,请告诉我。
data have;
format service_date date9.;
informat id 8. service_date date9. service $1.;
input id service_date service;
datalines;
1 01jan2013 a
1 01feb2013 b
1 14feb2013 c
1 15feb2013 d
2 01mar2013 a
2 01mar2013 a
2 01oct2013 a
2 01oct2013 a
;
run;
data want;
array dates[3];
do _n_ = 1 by 1 until (last.ID);
set have;
by ID;
dates[mod(_n_,3)+1] = service_date;
if _n_ >= 3 then do;
if intnx('month', dates[mod(_n_,3)+1],-3) <= min(dates[mod(_n_-1,3)+1], dates[mod(_n_-2,3)+1]) then do;
output;
delete;
end;
end;
end;
run;
我似乎无意中将此设置为发现在3个月内而不是90天内有3个或更多服务的情况,但这很容易改变。