Nevermind, I figured it out. Here is the code based on above: /************MERGE CLAIMS WITH MBR_SYS_ID ************/ PROC SQL; CREATE TABLE ReAdm.Claims_Merge AS (SELECT DISTINCT A.*, B.ADMIT_DT FORMAT=DATE8., CASE WHEN B.DISCH_DT IS NULL THEN A.FST_SRVC_DT ELSE B.DISCH_DT END AS DISCH_DT FORMAT=DATE8., CASE WHEN B.DISCH_DT IS NOT NULL THEN B.DISCH_DT+30 END AS CUTPUT_DT FORMAT=DATE8., CASE WHEN B.DISCH_DT IS NOT NULL THEN B.DISCH_DT+1 END AS START_DT FORMAT=DATE8., B.STAT_DAY FROM ReAdm.Claims A LEFT JOIN ReAdm.Claims_Inpt B ON A.MBR_SYS_ID = B.MBR_SYS_ID AND A.FST_SRVC_DT BETWEEN B.ADMIT_DT AND B.DISCH_DT) ORDER BY MBR_SYS_ID, STAT_DAY DESC; QUIT; Then I have the rest of the code that is: PROC SORT NODUPKEY; BY MBR_SYS_ID--PROV_EFF_DT; RUN; DATA READM.CLAIMS_INPT2; SET READM.CLAIMS_INPT; READMIT_DT=ADMIT_DT; REDISCH_DT=DISCH_DT; START_DT2=DISCH_DT+1; CUTPUT_DT2=DISCH_DT+30; FORMAT READMIT_DT DATE8. REDISCH_DT DATE8. /*COUNT_DT DATE8.*/ START_DT2 DATE8. CUTPUT_DT2 DATE8.; KEEP READMIT_DT REDISCH_DT MBR_SYS_ID COUNT_DT CUTPUT_DT2 START_DT2 ; RUN; PROC SQL; CREATE TABLE ReAdm.Claims_Merge2 AS (SELECT DISTINCT A.*, A.ADMIT_DT FORMAT=DATE8., B.START_DT2 FORMAT=DATE8., B.READMIT_DT FORMAT=DATE8., B.REDISCH_DT FORMAT=DATE8., B.CUTPUT_DT2 FORMAT=DATE8. FROM ReAdm.Claims_Merge A LEFT JOIN ReAdm.Claims_Inpt2 B ON A.MBR_SYS_ID = B.MBR_SYS_ID AND B.READMIT_DT BETWEEN A.START_DT AND A.CUTPUT_DT) ORDER BY MBR_SYS_ID, STAT_DAY DESC; QUIT; PROC SORT NODUPKEY; BY MBR_SYS_ID--PROV_EFF_DT; RUN; By including the start_dt var and doing it off the disch_dt+1 I get to beging counting the readmits 1 day after the patient is discharged. So instead of 10k plus readmits due to counting the disch_dt as a readmit date because the patients were readmitted, just readmitted the same day, I end up with a count of 3454 readmits after getting rid of the dupes. Dupes as in the member might have 10 readmits between that 1 and 30 days but they only get a count of 1. So my code is working great now and I got what I need. Thanks.
... View more