这是样本数据.如果他们在45天之内有4次或更多次就诊,我只需要保留一位患者.我已经转换了数据集并使用数组来找出一种方法,但我希望有一种更有效的方法.
Pat_ID Date Prov_ID
A 05/12/2012 X1
A 05/12/2012 X2
B 11/12/2012 X1
B 11/20/2012 X1
B 01/12/2013 X1
B 03/22/2013 X1
C 04/25/2013 X1
C 04/25/2013 X2
C 04/27/2013 X1
C 05/12/2013 X1
C 05/22/2013 X2
C 04/25/2012 X3
...
Run Code Online (Sandbox Code Playgroud)
我开始删除少于4个事件的观察.
任何想法,将不胜感激.
结果结果应该是在45天内仅具有4次或更多次访问的PAT_ID的数据集.
这是一个基于SAS(而不是SQL)的解决方案,使用该lag功能.它只能读取一次数据,所以应该非常有效,特别是与自我式的解决方案相比.
首先按ID和访问日期对数据进行排序(如果还没有)
proc sort data=YourData;
by Pat_ID Date;
run;
Run Code Online (Sandbox Code Playgroud)
如果您追溯3条记录中的Pat_ID和日期,您可以测试它是否在45天内并且是同一患者.如果是这样 - 将其添加到列表中.
data list_of_membs(keep=PAT_ID);
set YourData;
retain last_Pat_ID;*The last PAT_ID that was added to the list;
pat_id_3back = lag3(Pat_ID); *PAT_ID from 3 records back;
date_3back = lag3(date);
If pat_id = pat_id_3back
AND (date - date_3back) < 45
AND (PAT_ID != last_Pat_ID) THEN DO;
output;
last_PAT_ID = PAT_ID;
END;
run;
Run Code Online (Sandbox Code Playgroud)