动态SAS程序,用于合并彼此嵌套的事件的日期

时间:2017-10-13 14:09:05

标签: sas

Example 您好,

我想编写一个动态程序,它可以帮助我标记嵌套在附加示例中每个Pt.ID顶部的合并日期内的事件的开始和结束日期。如果每个Pt.ID只有一个这样的合并期,我可以很容易地做到这些。但是,每个Pt可能有不止一个这样的合并期。 ID。 (如第二个Pt.ID所示,1002)。如示例所示,属于合并期间/ s的事件在标志变量中作为“Y”被标记为“Y”,如果它们不在合并期间内,则它们在此变量中标记为“N”。如何编写一个程序来计算每个Pt.ID的所有这些合并期间,然后将它们与特定患者的其他事件的日期进行比较,并标记属于任何合并期间的事件?

谢谢。

1 个答案:

答案 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;