/***********************************************************************************************************************/ /* comorbidity.example.program.sas */ /* Created: 9/21/2021 */ /***********************************************************************************************************************/ /* This SAS program is an example of how to build an input file for the comorobidity macro with 2020 Linkage files. */ /* SAS date variables are created for the diagnosis date, start & end of the comorbidity window, and the claim from */ /* and thru dates. Diagnosis code and other variables are renamed so that they are the same across claims files. */ /* All unnecessary variables are dropped, for better efficiency, and the claims files are "set" together. */ /* Only the claims within the window (+/- 30 days) are selected out of all claims for the patients in SEER. */ /* Then, the comorbidity macro is called. */ /***********************************************************************************************************************/ data SEER; set SEER(keep=patient_id Year_of_diagnosis Month_of_diagnosis_recode); Diagnosis_date = mdy(Month_of_diagnosis_recode,1,Year_of_diagnosis); Start_date = mdy(Month_of_diagnosis_recode,1,Year_of_diagnosis-1); /* first day of the month a year before diagnosis */ End_date = mdy(Month_of_diagnosis_recode,1,Year_of_diagnosis)-1; /* last day of the month before diagnosis */ format Diagnosis_date Start_date End_date mmddyy10.; label Diagnosis_date = "Date of diagnosis" Start_date = 'One year before date of diagnosis' End_date = 'Last day before month of diagnosis' ; run; data Claims; set MEDPAR(in=M keep=PATIENT_ID ADMSN_DT DSCHRG_DT LOS_DAY_CNT ADMTG_DGNS_CD DGNS_1_CD--DGNS_25_CD /* rename MEDPAR variables to have the same names as OUTPAT and NCH */ rename=(ADMSN_DT=CLM_FROM_DT DSCHRG_DT=CLM_THRU_DT ADMTG_DGNS_CD=PRNCPAL_DGNS_CD DGNS_1_CD=ICD_DGNS_CD1 DGNS_2_CD=ICD_DGNS_CD2 DGNS_3_CD=ICD_DGNS_CD3 DGNS_4_CD=ICD_DGNS_CD4 DGNS_5_CD=ICD_DGNS_CD5 DGNS_6_CD=ICD_DGNS_CD6 DGNS_7_CD=ICD_DGNS_CD7 DGNS_8_CD=ICD_DGNS_CD8 DGNS_9_CD=ICD_DGNS_CD9 DGNS_10_CD=ICD_DGNS_CD10 DGNS_11_CD=ICD_DGNS_CD11 DGNS_12_CD=ICD_DGNS_CD12 DGNS_13_CD=ICD_DGNS_CD13 DGNS_14_CD=ICD_DGNS_CD14 DGNS_15_CD=ICD_DGNS_CD15 DGNS_16_CD=ICD_DGNS_CD16 DGNS_17_CD=ICD_DGNS_CD17 DGNS_18_CD=ICD_DGNS_CD18 DGNS_19_CD=ICD_DGNS_CD19 DGNS_20_CD=ICD_DGNS_CD20 DGNS_21_CD=ICD_DGNS_CD21 DGNS_22_CD=ICD_DGNS_CD22 DGNS_23_CD=ICD_DGNS_CD23 DGNS_24_CD=ICD_DGNS_CD24 DGNS_25_CD=ICD_DGNS_CD25 ) ) OUTPAT(in=O keep=PATIENT_ID CLM_FROM_DT CLM_THRU_DT PRNCPAL_DGNS_CD ICD_DGNS_CD1-ICD_DGNS_CD25) NCH(in=N keep=PATIENT_ID CLM_FROM_DT CLM_THRU_DT PRNCPAL_DGNS_CD ICD_DGNS_CD1-ICD_DGNS_CD12 LINE_ICD_DGNS_CD) ; if M then Filetype = "M"; else if O then Filetype = "O"; else if N then Filetype = "N"; /* create SAS dates from character dates */ CLM_FROM_DATE = input(CLM_FROM_DT,yymmdd8.); CLM_THRU_DATE = input(CLM_THRU_DT,yymmdd8.); format CLM_FROM_DATE CLM_THRU_DATE mmddyy10.; drop CLM_FROM_DT CLM_THRU_DT; /* compute the claim thru date if it is missing */ if M and missing(CLM_THRU_DATE) then CLM_THRU_DATE = CLM_FROM_DATE + LOS_DAY_CNT; else if (N or O) and missing(CLM_THRU_DATE) then CLM_THRU_DATE = CLM_FROM_DATE; run; proc sql; create table SelectedClaims as select C.*,S.Diagnosis_date,S.Start_date,S.End_date from Claims as C, SEER as S where (C.PATIENT_ID=S.PATIENT_ID) and ( (S.Start_date-30)<=C.CLM_FROM_DATE<=(S.End_date+30) ) order by C.PATIENT_ID, C.CLM_FROM_DATE; quit; %include 'NCI.comorbidity.macro.sas'; %COMORB(SelectedClaims,PATIENT_ID,Start_date,End_date,CLM_FROM_DATE,CLM_THRU_DATE,Filetype, PRNCPAL_DGNS_CD ICD_DGNS_CD1-ICD_DGNS_CD25 LINE_ICD_DGNS_CD,R,Comorb); proc contents varnum; proc means; run;