%MACRO V2213L2M(INP=, IND=, OUTDATA=, IDVAR=, KEEPVAR=, SEDITS=, DATE_ASOF=, DATE_ASOF_EDIT=, FMNAME=, AGEFMT=, SEXFMT=, DF=1, AGESEXMAC=AGESEXV2, EDITMAC=V22EDIT1, LABELMAC=V22H79L1, HIERMAC=V22H79H1, MULTCCMAC=V22H79M1, SCOREMAC=SCOREVAR); %********************************************************************** * V2213L2M creates HCC and score variables for each person who is * present in a person file. * If a person has at least one diagnosis in DIAG file then HCCs are * created, otherwise HCCs are set to 0. * Score variables are created using coefficients from 4 final models: * community, institutional, new enrollees, SNP new enrollees. * * Assumptions about input files: * - both files are sorted by person ID * - person level file has the following variables: * :&IDVAR - person ID variable (it is a macro parameter) * :DOB - date of birth * :SEX - sex * :OREC - original reason for entitlement * :MCAID - Medicaid dummy variable * :NEMCAID - Medicaid dummy variable for new enrollees * * - diagnosis level file has the following variables: * :&IDVAR - person ID variable (it is a macro parameter) * :DIAG - diagnosis * * Parameters: * INP - input person dataset * IND - input diagnosis dataset * OUTDATA - output dataset * IDVAR - name of person id variable (HICNO for Medicare data) * KEEPVAR - variables to keep in the output file * SEDITS - a switch that controls whether to perform edits on * ICD9. 1-YES, 0-NO * DATE_ASOF - reference date to calculate age. Set to February 1 * of the payment year for consistency with CMS. * DATE_ASOF_EDIT - reference date to calculate age used for * validation of diagnoses (MCE edits) * FMNAME - format name (crosswalk ICD9 to V22 CCs) * AGEFMT - format name (crosswalk ICD9 to acceptable age range * in case MCE edits on ICD9 are to be performed) * SEXFMT - format name (crosswalk ICD9 to acceptable sex in * case MCE edits on ICD9 are to be performed) * DF - normalization factor. * Default=1 * AGESEXMAC - external macro name: create age/sex, * originally disabled, disabled vars * EDITMAC - external macro name: perform edits to diagnosis * LABELMAC - external macro name: assign labels to HCCs * HIERMAC - external macro name: set HCC=0 according to * hierarchies * MULTCCMAC - external macro name: assign one ICD9 to multiple CCs * SCOREMAC - external macro name: calculate a score variable * **********************************************************************; %********************************************************************** * step1: include external macros **********************************************************************; %IF "&AGESEXMAC" ne "" %THEN %DO; %INCLUDE IN0(&AGESEXMAC) /SOURCE2; %* create demographic variables; %END; %IF "&EDITMAC" ne "" %THEN %DO; %INCLUDE IN0(&EDITMAC) /SOURCE2; %* perform edits; %END; %IF "&LABELMAC" ne "" %THEN %DO; %INCLUDE IN0(&LABELMAC) /SOURCE2; %* hcc labels; %END; %IF "&HIERMAC" ne "" %THEN %DO; %INCLUDE IN0(&HIERMAC) /SOURCE2; %* hierarchies; %END; %IF "&MULTCCMAC" ne "" %THEN %DO; %INCLUDE IN0(&MULTCCMAC) /SOURCE2; %* multiple CCs; %END; %IF "&SCOREMAC" ne "" %THEN %DO; %INCLUDE IN0(&SCOREMAC) /SOURCE2; %* calculate score variable; %END; %********************************************************************** * step2: define internal macro variables **********************************************************************; %LET N_CC=201; %*max # of HCCs; %* age/sex variables for community and insititutional regression; %LET AGESEXV= F0_34 F35_44 F45_54 F55_59 F60_64 F65_69 F70_74 F75_79 F80_84 F85_89 F90_94 F95_GT M0_34 M35_44 M45_54 M55_59 M60_64 M65_69 M70_74 M75_79 M80_84 M85_89 M90_94 M95_GT; %* diagnostic categories necessary to create interaction variables; %LET DIAG_CAT= CANCER DIABETES IMMUNE CHF CARD_RESP_FAIL COPD RENAL COMPL SEPSIS PRESSURE_ULCER; %*interaction variables for Community regression; %LET INTERRACC_VARS = %STR(DISABLED_HCC6 DISABLED_HCC34 DISABLED_HCC46 DISABLED_HCC54 DISABLED_HCC55 DISABLED_HCC110 DISABLED_HCC176 SEPSIS_CARD_RESP_FAIL CANCER_IMMUNE DIABETES_CHF CHF_COPD CHF_RENAL COPD_CARD_RESP_FAIL); %*variables for Community regression ; %LET COMM_REG= %STR(&AGESEXV MCAID_Female_Aged MCAID_Female_Disabled MCAID_Male_Aged MCAID_Male_Disabled OriginallyDisabled_Female OriginallyDisabled_Male &INTERRACC_VARS &HCCV22_list79); %*interaction variables for Institutional regression; %LET INTERRACI_VARS = %STR(DISABLED_HCC85 DISABLED_PRESSURE_ULCER DISABLED_HCC161 DISABLED_HCC39 DISABLED_HCC77 DISABLED_HCC6 CHF_COPD COPD_CARD_RESP_FAIL SEPSIS_PRESSURE_ULCER SEPSIS_ARTIF_OPENINGS ART_OPENINGS_PRESSURE_ULCER DIABETES_CHF COPD_ASP_SPEC_BACT_PNEUM ASP_SPEC_BACT_PNEUM_PRES_ULC SEPSIS_ASP_SPEC_BACT_PNEUM SCHIZOPHRENIA_COPD SCHIZOPHRENIA_CHF SCHIZOPHRENIA_SEIZURES); %*variables for Institutional regression; %LET INST_REG = %STR(&AGESEXV MCAID ORIGDS &INTERRACI_VARS &HCCV22_list79); %*age/sex variables for non-ORIGDS New Enrollee and SNP New Enrollee interactions; %LET NE_AGESEXV= NEF0_34 NEF35_44 NEF45_54 NEF55_59 NEF60_64 NEF65 NEF66 NEF67 NEF68 NEF69 NEF70_74 NEF75_79 NEF80_84 NEF85_89 NEF90_94 NEF95_GT NEM0_34 NEM35_44 NEM45_54 NEM55_59 NEM60_64 NEM65 NEM66 NEM67 NEM68 NEM69 NEM70_74 NEM75_79 NEM80_84 NEM85_89 NEM90_94 NEM95_GT; %*age/sex variables for ORIGDS New Enrollee and SNP New Enrollee interactions; %LET ONE_AGESEXV= NEF65 NEF66 NEF67 NEF68 NEF69 NEF70_74 NEF75_79 NEF80_84 NEF85_89 NEF90_94 NEF95_GT NEM65 NEM66 NEM67 NEM68 NEM69 NEM70_74 NEM75_79 NEM80_84 NEM85_89 NEM90_94 NEM95_GT; %*variables for New Enrollee and SNP New Enrollee regression; %LET NE_REG=%STR( NMCAID_NORIGDIS_NEF0_34 NMCAID_NORIGDIS_NEF35_44 NMCAID_NORIGDIS_NEF45_54 NMCAID_NORIGDIS_NEF55_59 NMCAID_NORIGDIS_NEF60_64 NMCAID_NORIGDIS_NEF65 NMCAID_NORIGDIS_NEF66 NMCAID_NORIGDIS_NEF67 NMCAID_NORIGDIS_NEF68 NMCAID_NORIGDIS_NEF69 NMCAID_NORIGDIS_NEF70_74 NMCAID_NORIGDIS_NEF75_79 NMCAID_NORIGDIS_NEF80_84 NMCAID_NORIGDIS_NEF85_89 NMCAID_NORIGDIS_NEF90_94 NMCAID_NORIGDIS_NEF95_GT NMCAID_NORIGDIS_NEM0_34 NMCAID_NORIGDIS_NEM35_44 NMCAID_NORIGDIS_NEM45_54 NMCAID_NORIGDIS_NEM55_59 NMCAID_NORIGDIS_NEM60_64 NMCAID_NORIGDIS_NEM65 NMCAID_NORIGDIS_NEM66 NMCAID_NORIGDIS_NEM67 NMCAID_NORIGDIS_NEM68 NMCAID_NORIGDIS_NEM69 NMCAID_NORIGDIS_NEM70_74 NMCAID_NORIGDIS_NEM75_79 NMCAID_NORIGDIS_NEM80_84 NMCAID_NORIGDIS_NEM85_89 NMCAID_NORIGDIS_NEM90_94 NMCAID_NORIGDIS_NEM95_GT MCAID_NORIGDIS_NEF0_34 MCAID_NORIGDIS_NEF35_44 MCAID_NORIGDIS_NEF45_54 MCAID_NORIGDIS_NEF55_59 MCAID_NORIGDIS_NEF60_64 MCAID_NORIGDIS_NEF65 MCAID_NORIGDIS_NEF66 MCAID_NORIGDIS_NEF67 MCAID_NORIGDIS_NEF68 MCAID_NORIGDIS_NEF69 MCAID_NORIGDIS_NEF70_74 MCAID_NORIGDIS_NEF75_79 MCAID_NORIGDIS_NEF80_84 MCAID_NORIGDIS_NEF85_89 MCAID_NORIGDIS_NEF90_94 MCAID_NORIGDIS_NEF95_GT MCAID_NORIGDIS_NEM0_34 MCAID_NORIGDIS_NEM35_44 MCAID_NORIGDIS_NEM45_54 MCAID_NORIGDIS_NEM55_59 MCAID_NORIGDIS_NEM60_64 MCAID_NORIGDIS_NEM65 MCAID_NORIGDIS_NEM66 MCAID_NORIGDIS_NEM67 MCAID_NORIGDIS_NEM68 MCAID_NORIGDIS_NEM69 MCAID_NORIGDIS_NEM70_74 MCAID_NORIGDIS_NEM75_79 MCAID_NORIGDIS_NEM80_84 MCAID_NORIGDIS_NEM85_89 MCAID_NORIGDIS_NEM90_94 MCAID_NORIGDIS_NEM95_GT NMCAID_ORIGDIS_NEF65 NMCAID_ORIGDIS_NEF66 NMCAID_ORIGDIS_NEF67 NMCAID_ORIGDIS_NEF68 NMCAID_ORIGDIS_NEF69 NMCAID_ORIGDIS_NEF70_74 NMCAID_ORIGDIS_NEF75_79 NMCAID_ORIGDIS_NEF80_84 NMCAID_ORIGDIS_NEF85_89 NMCAID_ORIGDIS_NEF90_94 NMCAID_ORIGDIS_NEF95_GT NMCAID_ORIGDIS_NEM65 NMCAID_ORIGDIS_NEM66 NMCAID_ORIGDIS_NEM67 NMCAID_ORIGDIS_NEM68 NMCAID_ORIGDIS_NEM69 NMCAID_ORIGDIS_NEM70_74 NMCAID_ORIGDIS_NEM75_79 NMCAID_ORIGDIS_NEM80_84 NMCAID_ORIGDIS_NEM85_89 NMCAID_ORIGDIS_NEM90_94 NMCAID_ORIGDIS_NEM95_GT MCAID_ORIGDIS_NEF65 MCAID_ORIGDIS_NEF66 MCAID_ORIGDIS_NEF67 MCAID_ORIGDIS_NEF68 MCAID_ORIGDIS_NEF69 MCAID_ORIGDIS_NEF70_74 MCAID_ORIGDIS_NEF75_79 MCAID_ORIGDIS_NEF80_84 MCAID_ORIGDIS_NEF85_89 MCAID_ORIGDIS_NEF90_94 MCAID_ORIGDIS_NEF95_GT MCAID_ORIGDIS_NEM65 MCAID_ORIGDIS_NEM66 MCAID_ORIGDIS_NEM67 MCAID_ORIGDIS_NEM68 MCAID_ORIGDIS_NEM69 MCAID_ORIGDIS_NEM70_74 MCAID_ORIGDIS_NEM75_79 MCAID_ORIGDIS_NEM80_84 MCAID_ORIGDIS_NEM85_89 MCAID_ORIGDIS_NEM90_94 MCAID_ORIGDIS_NEM95_GT); %*macro to create New Enrollee and SNP New Enrollee regression variables; %MACRO INTER(PVAR=, RLIST=); %LOCAL I; %LET I=1; %DO %UNTIL(%SCAN(&RLIST,&I)=); &PVAR._%SCAN(&RLIST,&I) = &PVAR * %SCAN(&RLIST,&I); %LET I=%EVAL(&I+1); %END; %MEND INTER; %********************************************************************** * step3: merge person and diagnosis files outputting one record * per person with score and HCC variables for each input person * level record ***********************************************************************; DATA &OUTDATA(KEEP=&KEEPVAR ); %**************************************************** * step3.1: declaration section ****************************************************; %IF "&LABELMAC" ne "" %THEN %&LABELMAC; *HCC labels; %* length of new variables (length for other age/sex vars is set in &AGESEXMAC macro); LENGTH CC $4. AGEF MCAID_Female_Aged MCAID_Female_Disabled MCAID_Male_Aged MCAID_Male_Disabled OriginallyDisabled_Female OriginallyDisabled_Male &NE_REG CC1-CC&N_CC HCC1-HCC&N_CC &DIAG_CAT &INTERRACC_VARS &INTERRACI_VARS AGEF_EDIT 3.; %*retain cc vars; RETAIN CC1-CC&N_CC 0 AGEF AGEF_EDIT; %*arrays; ARRAY C(&N_CC) CC1-CC&N_CC; ARRAY HCC(&N_CC) HCC1-HCC&N_CC; %*interaction vars; ARRAY RV &INTERRACC_VARS &INTERRACI_VARS &DIAG_CAT; %*************************************************** * step3.2: to bring in regression coefficients ****************************************************; IF _N_ = 1 THEN SET INCOEF.HCCCOEFN; %*************************************************** * step3.3: merge ****************************************************; MERGE &INP(IN=IN1) &IND(IN=IN2); BY &IDVAR; IF IN1 THEN DO; %******************************************************* * step3.4: for the first record for a person set CC to 0 ********************************************************; IF FIRST.&IDVAR THEN DO; %*set ccs to 0; DO I=1 TO &N_CC; C(I)=0; END; %* age; AGEF =FLOOR((INTCK( 'MONTH',DOB,&DATE_ASOF)-(DAY(&DATE_ASOF)=65)*(OREC='1'); NMCAID_NORIGDIS = (NEMCAID <=0 and NE_ORIGDS <=0); MCAID_NORIGDIS = (NEMCAID > 0 and NE_ORIGDS <=0); NMCAID_ORIGDIS = (NEMCAID <=0 and NE_ORIGDS > 0); MCAID_ORIGDIS = (NEMCAID > 0 and NE_ORIGDS > 0); %INTER(PVAR = NMCAID_NORIGDIS, RLIST = &NE_AGESEXV ); %INTER(PVAR = MCAID_NORIGDIS, RLIST = &NE_AGESEXV ); %INTER(PVAR = NMCAID_ORIGDIS, RLIST = &ONE_AGESEXV); %INTER(PVAR = MCAID_ORIGDIS, RLIST = &ONE_AGESEXV); IF IN1 & IN2 THEN DO; %********************** * hierarchies **********************; %IF "&HIERMAC" ne "" %THEN %&HIERMAC; %************************ * interaction variables *************************; %*community model diagnostic categories; CANCER = MAX(HCC8, HCC9, HCC10, HCC11, HCC12); DIABETES = MAX(HCC17, HCC18, HCC19); IMMUNE = HCC47; CARD_RESP_FAIL = MAX(HCC82, HCC83, HCC84); CHF = HCC85; COPD = MAX(HCC110, HCC111); RENAL = MAX(HCC134, HCC135, HCC136, HCC137, HCC138, HCC139, HCC140, HCC141); COMPL = HCC176; SEPSIS = HCC2; %*interactions ; SEPSIS_CARD_RESP_FAIL = SEPSIS*CARD_RESP_FAIL; CANCER_IMMUNE = CANCER*IMMUNE; DIABETES_CHF = DIABETES*CHF ; CHF_COPD = CHF*COPD ; CHF_RENAL = CHF*RENAL ; COPD_CARD_RESP_FAIL = COPD*CARD_RESP_FAIL ; %*interactions with disabled ; DISABLED_HCC6 = DISABL*HCC6; %*Opportunistic Infections; DISABLED_HCC34 = DISABL*HCC34; %*Chronic Pancreatitis; DISABLED_HCC46 = DISABL*HCC46; %*Severe Hematol Disorders; DISABLED_HCC54 = DISABL*HCC54; %*Drug/Alcohol Psychosis; DISABLED_HCC55 = DISABL*HCC55; %*Drug/Alcohol Dependence; DISABLED_HCC110 = DISABL*HCC110; %*Cystic Fibrosis; DISABLED_HCC176 = DISABL*HCC176; %* added 7/2009; %*institutional model; PRESSURE_ULCER = MAX(HCC157, HCC158); /*10/19/2012*/; SEPSIS_PRESSURE_ULCER = SEPSIS*PRESSURE_ULCER; SEPSIS_ARTIF_OPENINGS = SEPSIS*(HCC188); ART_OPENINGS_PRESSURE_ULCER = (HCC188)*PRESSURE_ULCER; DIABETES_CHF = DIABETES*CHF; COPD_ASP_SPEC_BACT_PNEUM = COPD*(HCC114); ASP_SPEC_BACT_PNEUM_PRES_ULC = (HCC114)*PRESSURE_ULCER; SEPSIS_ASP_SPEC_BACT_PNEUM = SEPSIS*(HCC114); SCHIZOPHRENIA_COPD = (HCC57)*COPD; SCHIZOPHRENIA_CHF= (HCC57)*CHF; SCHIZOPHRENIA_SEIZURES = (HCC57)*(HCC79); DISABLED_HCC85 = DISABL*(HCC85); DISABLED_PRESSURE_ULCER = DISABL*PRESSURE_ULCER; DISABLED_HCC161 = DISABL*(HCC161); DISABLED_HCC39 = DISABL*(HCC39); DISABLED_HCC77 = DISABL*(HCC77); END; *there are some diagnoses for a person; ELSE DO; DO I=1 TO &N_CC; HCC(I)=0; END; DO OVER RV; RV=0; END; END; %*score calculation; /***************************/ /* community model */ /***************************/; %IF "&SCOREMAC" ne "" %THEN %DO; %&SCOREMAC(PVAR=SCORE_COMMUNITY, RLIST=&COMM_REG, CPREF=CE_); /***************************/ /* institutional model */ /***************************/; %&SCOREMAC(PVAR=SCORE_INSTITUTIONAL, RLIST=&INST_REG, CPREF=INS_); /***************************/ /* new enrollees model */ /***************************/; %&SCOREMAC(PVAR=SCORE_NEW_ENROLLEE, RLIST=&NE_REG, CPREF=NE_); /***************************/ /* SNP new enrollees model */ /***************************/; %SCOREVAR(PVAR=SCORE_SNP_NEW_ENROLLEE, RLIST=&NE_REG, CPREF=SNPNE_); %END; /****************************/ /* normalize the scores */ /***************************/; SCORE_COMMUNITY = SCORE_COMMUNITY *&DF; SCORE_INSTITUTIONAL = SCORE_INSTITUTIONAL *&DF; SCORE_NEW_ENROLLEE = SCORE_NEW_ENROLLEE *&DF; SCORE_SNP_NEW_ENROLLEE = SCORE_SNP_NEW_ENROLLEE*&DF; OUTPUT &OUTDATA; END; %*last record for a person; END; %*there is a person record; RUN; %********************************************************************** * step4: data checks and proc contents ***********************************************************************; PROC PRINT U DATA=&OUTDATA(OBS=46); TITLE '*** V2213L2M output file ***'; RUN ; PROC CONTENTS DATA=&OUTDATA; RUN; %MEND V2213L2M;