Hi SAS Community, I could really use your help! I have overlapping dates that I want to stretch out continuously. Suppose I have the following claims: rx_start rx_end 5/28/2014 6/27/2014 6/28/2014 7/28/2014 7/26/2014 8/25/2014 8/24/2014 9/23/2014 9/21/2014 10/21/2014 10/25/2014 11/24/2014 11/22/2014 12/22/2014 12/20/2014 1/19/2015 I want to create a new column of rx start/end dates that doesn't overlap. The first obs doesn't overlap with a prior. Thus, the new column of rx start/end would have the same values. The second obs doesn't overlap with the first; thus, the new column of rx start/end would have the same value as well. The third row overlaps with the prior by two days. So, the new column of rx start/end would shift forward to 7/28/2014 - 8/27/2014. The fourth row overlaps with the NEW rx start/end dates of the prior row (row 3) by 3 days. So, it's new rx start/end date is 8/27/2014 - 9/26/2014. The 5th row overlaps with the 4th row's new dates of 8/27/2014 - 9/26/2014 by 5 days. So, it should shift forward to 9/26/2014 to 10/26/2016. And, so forth and so forth. My current versions of code are: data temp6; set temp5; by person_id class_category molecule strength rx_start rx_end; retain days_overlap rx_start_new rx_end_new; rx_start_new=.; rx_end_new=.; days_overlap=.; format rx_start_new rx_end_new mmddyy10.; if first.person_id then do; days_overlap=0; rx_start_new=datepart(rx_start); rx_end_new=datepart(rx_end); end; else do; days_overlap=max(intck('dtday',rx_start, lag(rx_end_new)),0); if days_overlap=0 then do; rx_start_new=datepart(rx_start); rx_end_new=datepart(rx_end); end; else if days_overlap >0 then do; rx_start_new=intnx('day',datepart(rx_start),days_overlap); rx_end_new=intnx('day',datepart(rx_end),days_overlap); end; end; run; AND data temp3; set temp2; by person_id class_category molecule strength rx_start rx_end; retain days_overlap rx_start_new rx_end_new; rx_start_new=.; rx_end_new=.; lagrx_start=lag(rx_start_new); lagrx_end=lag(rx_end_new); days_overlap=.; format rx_start_new rx_end_new mmddyy10.; if first.person_id then do; days_overlap=0; rx_start_new=datepart(rx_start); rx_end_new=datepart(rx_end); end; else if rx_start < lag(rx_end_new) then do; days_overlap=intck('dtday',rx_start, lagrx_end); rx_start_new=intnx('day',rx_start,days_overlap); rx_start_end=intnx('day',rx_end, days_overlap); end; else do; days_overlap=0; rx_start_new=datepart(rx_start); rx_end_new=datepart(rx_end); output; end; run; Neither is working properly. So, I could really use some advice! Thanks in advance!
... View more