@mkeintz is right. It requires look-ahead. But I fear that using a merge inside a loop in the data step would not be very efficient with large data sets. I suggest doing it in a previous step instead:
proc sql;
create table inter as
select
a.PATIENT_ID,
a.ADMISSION_START_DT,
a.ADMISSION_END_DT,
coalesce(b.APR_MDC_DESC, a.APR_MDC_DESC) as APR_MDC_DESC,
a.SERVICE_CAT,
coalesce(b.HOSPITAL_ID, a.HOSPITAL_ID) as HOSPITAL_ID
from have as a left join have as b
on a.PATIENT_ID = b.PATIENT_ID
and a.ADMISSION_END_DT = b.ADMISSION_START_DT
order by a.PATIENT_ID, a.ADMISSION_START_DT;
quit;
data want2 (drop=Old_End); set inter; by PATIENT_ID;
Old_End = lag(ADMISSION_END_DT);
if not first.PATIENT_ID then do;
if ADMISSION_START_DT = Old_End then delete;
else if (ADMISSION_START_DT - Old_End) < 15 then READMIT_FLAG_15_DAY = 'Y';
end;
run;
... View more