/******************************************************************/ /* TITLE : CCS MENTAL HEALTH / SUBSTANCE ABUSE CATEGORIES */ /* LOAD SOFTWARE, VERSION 2.0 */ /* */ /* PROGRAM : CCS-MHSA_LOAD */ /* */ /* DESCRIPTION: This program creates the new CCS Mental Health */ /* and Substance Abuse (CCS-MHSA) categories using */ /* diagnoses from your SAS data. */ /* */ /* The program uses SAS informats to create the */ /* CCS-MHSA variables for both general and specific */ /* categories. Beginning in FY2008, the specific */ /* categories now match the multi-level CCS category */ /* scheme from the regular CCS. There are only 3 */ /* levels of MHSA specific categories. */ /* */ /******************************************************************/ FILENAME INRAW1 'C:\DATA\CCS-MHSA_GENERAL_08.CSV';'; * Modify path & name of format source file ; FILENAME INRAW2 'C:\DATA\CCS-MHSA_SPECIFIC_08.CSV'; * Modify path & name of format source file ; LIBNAME IN1 'C:\DATA\'; * Modify location of input discharge data; LIBNAME OUT1 'C:\DATA\'; * Modify location of output data; TITLE1 'Creation of CCS mental health/substance abuse categories'; TITLE2 'Use with discharge administrative data that has diagnosis codes'; /*******************************************************************/ /* Macro Variables that must be set to define the characteristics */ /* of the input discharge data to the program */ /*******************************************************************/ * Enter the Maximum number of DXs on your SAS File; %LET NUMDX=15; * Enter your SAS file name; %LET CORE=YOUR_SAS_FILE; OPTIONS OBS=MAX; /*******************************************************************/ /* SAS Load the CCS-MHSA General tool and convert it into a */ /* temporary SAS informat that will be used to create the */ /* CCS-MHSA general variables. */ /*******************************************************************/ DATA INFORMAT1 ; INFILE INRAW1 DSD DLM=',' END = EOF FIRSTOBS=3; INPUT START : $CHAR5. LABEL : $CHAR3. ; RETAIN HLO " "; FMTNAME = "$MHSAG" ; TYPE = "J" ; OUTPUT; IF EOF THEN DO ; START = " " ; LABEL = " " ; HLO = "O"; OUTPUT ; END ; RUN; PROC FORMAT LIB=WORK CNTLIN = INFORMAT1 ; RUN; %Macro MultiCCS; /******************************************************************/ /* SAS Load the CCS-MHSA specific tool and convert it into a */ /* series of temporary SAS informats that will be used to assign */ /* the CCS-MHSA specific variables. */ /******************************************************************/ %macro multidxccs(fmt_,var1_,var2_,var3_,var4_,var5_,var6_,var7_,var8_); DATA CCS_MULTI_DX; INFILE INRAW2 DSD DLM=',' END = EOF FIRSTOBS=3; INPUT START : $CHAR5. &var1_ : $CHAR2. &var2_ : $CHAR85. &var3_ : $CHAR5. &var4_ : $CHAR85. &var5_ : $CHAR7. &var6_ : $CHAR85. &var7_ : $CHAR9. &var8_ : $CHAR85. ; RETAIN HLO " "; FMTNAME = "&fmt_" ; TYPE = "J" ; OUTPUT; IF EOF THEN DO ; START = " " ; LABEL = " " ; HLO = "O"; OUTPUT ; END ; RUN; PROC FORMAT LIB=WORK CNTLIN = CCS_MULTI_DX; RUN; %mend multidxccs; %if &NUMDX > 0 %then %do; %multidxccs($L1MHSA,LABEL,L1L,L2,L2L,L3,L3L,L4,L4L); %multidxccs($L2MHSA,L1,L1L,LABEL,L2L,L3,L3L,L4,L4L); %multidxccs($L3MHSA,L1,L1L,L2,L2L,LABEL,L3L,L4,L4L); %end; /*******************************************************************/ /* Create the CCS-MHSA variables for both general and specific */ /* categories. Run frequencies on the CCS-MHSA variables. */ /*******************************************************************/ DATA OUT1.ANALYSIS; SET IN1.&CORE; ARRAY MHSAG (*) $3 CCSMGEN1-CCSMGEN&NUMDX; * Suggested name for CCS-MHSA General variables; ARRAY L1MHSA (*) $5 L1MHSA1-L1MHSA&NUMDX; * Suggested name for Level 1 Multi-Level DX CCS variables; ARRAY L2MHSA (*) $5 L2MHSA1-L2MHSA&NUMDX; * Suggested name for Level 2 Multi-Level DX CCS variables; ARRAY L3MHSA (*) $7 L3MHSA1-L3MHSA&NUMDX; * Suggested name for Level 3 Multi-Level DX CCS variables; ARRAY DXS (*) $ DX1-DX&NUMDX; * Change diagnosis variable names to match your file; DO I = 1 TO &NUMDX; MHSAG(I) = INPUT(DXS(I),$MHSAG.); L1MHSA(I) = INPUT(DXS(I),$L1MHSA.); L2MHSA(I) = INPUT(DXS(I),$L2MHSA.); L3MHSA(I) = INPUT(DXS(I),$L3MHSA.); END; DROP I; %Macro Labels; /***************************************************/ /* Create labels for the general and specific */ /* CCS-MHSA variables. */ /***************************************************/ %do I=1 %to &NUMDX; LABEL CCSMGEN&I = "CCS-MHSA General Variable &I" L1MHSA&I = "CCS-MHSA Specific Level 1 Variable &I" L2MHSA&I = "CCS-MHSA Specific Level 2 Variable &I" L3MHSA&I = "CCS-MHSA Specific Level 3 Variable &I" ; %end; %Mend Labels; %Labels; RUN; PROC CONTENTS DATA=OUT1.ANALYSIS; TITLE3 'Contents of file with new CCS-MHSA categories'; RUN; PROC FREQ DATA=OUT1.ANALYSIS; TABLES CCSMGEN1-CCSMGEN&NUMDX L1MHSA1-L1MHSA&NUMDX L2MHSA1-L2MHSA&NUMDX L3MHSA1-L3MHSA&NUMDX / MISSING LIST; TITLE3 'Frequency of new CCS-MHSA categories'; RUN; %Mend MultiCCS; %MultiCCS;