我想编写一个动态程序,它可以帮助我标记嵌套在附加示例中每个Pt.ID顶部的合并日期内的事件的开始和结束日期。如果每个Pt.ID只有一个这样的合并期,我可以很容易地做到这些。但是,每个Pt可能有不止一个这样的合并期。 ID。 (如第二个Pt.ID所示,1002)。如示例所示,属于合并期间/ s的事件在标志变量中作为“Y”被标记为“Y”,如果它们不在合并期间内,则它们在此变量中标记为“N”。如何编写一个程序来计算每个Pt.ID的所有这些合并期间,然后将它们与特定患者的其他事件的日期进行比较,并标记属于任何合并期间的事件?
谢谢。
答案 0 :(得分:0)
因此,将事件记录与期间记录结合起来,并计算事件是否在期间内。然后你可以在所有时期内使用MAX。 例如,这里是您的示例代码,它创建一个名为INCLUDED的二进制1/0标志变量。
data Sample;
infile datalines missover;
input Pt_ID Event_ID Category $ Start_Date : mmddyy10.
Start_Day End_date : mmddyy10. End_day Duration
;
format Start_date End_date mmddyy10.;
datalines;
1001 . Moderate 8/5/2016 256 9/3/2016 285 30
1001 1 Moderate 3/8/2016 106 3/16/2016 114 9
1001 2 Moderate 8/5/2016 256 8/14/2016 265 10
1001 3 Moderate 8/21/2016 272 8/24/2016 275 4
1001 4 Moderate 8/23/2016 274 9/3/2016 285 12
1002 . Severe 11/28/2016 13 12/19/2016 34 22
1002 . Severe 2/6/2017 83 2/28/2017 105 23
1002 1 Severe 11/28/2016 13 12/5/2016 20 8
1002 2 Severe 12/12/2016 27 12/19/2016 34 8
1002 3 Severe 1/9/2017 55 1/12/2017 58 4
1002 4 Severe 2/6/2017 83 2/13/2017 90 8
1002 5 Severe 2/20/2017 97 2/28/2017 105 9
1002 6 Severe 3/17/2017 122 3/24/2017 129 8
1002 7 Severe 5/4/2017 170 5/13/2017 179 10
1002 8 Severe 5/24/2017 190 5/30/2017 196 7
1002 9 Severe 6/9/2017 206 6/13/2017 210 5
;
proc sql ;
create table want as
select a.*
, max(b.start_date <= a.start_date and b.end_date >= a.end_date ) as Included
from sample a
left join sample b
on a.pt_id = b.pt_id and missing(b.event_id)
group by 1,2,3,4,5,6,7,8
order by a.pt_id, a.event_id, a.start_date , a.end_date
;
quit;