/****************************************************************************\ PROGRAM: C:\\MEPS\PROG\EXAMPLE04.SAS DESCRIPTION: THIS EXAMPLE ILLUSTRATES TWO WAYS OF DETERMINING THE NUMBER OF EVENTS ASSOCIATED WITH CONDITIONS. (1) USING THE evNUM VARIABLES ON THE CONDITIONS FILE. (2) USING THE NUMBER OF MATCHES BETWEEN THE CONDITIONS FILE AND THE CLNK FILE. ABOUT 76% OF THE CONDITIONS LISTED ON THE 2003 MEDICAL CONDITIONS FILE ARE ASSOCIATED WITH ONE OR MORE EVENTS. NOTE: BECAUSE PERSONS CAN HAVE MORE THAN ONE REPORTED CONDITION, AND A CONDITION CAN BE ASSOCIATED WITH MORE THAN ONE EVENT, THE COUNTS COMPUTED HERE FOR THE CONDITION LEVEL WILL NOT EQUAL PERSON- OR EVENT-LEVEL COUNTS. FOR EXAMPLE, ONE HOSPITAL STAY MIGHT BE ASOCIATED WITH TWO CONDITIONS (BROKEN ARM, BROKEN LEG). ALSO, ONE CONDITION (STROKE) MIGHT BE ASSOCIATED WITH TWO EVENTS (HOSPITAL STAY, OFFICE VISIT). INPUT FILES: (1) C:\MEPS\DATA\H78.SAS7BDAT (2003 MEDICAL CONDITIONS FILE) (2) C:\MEPS\DATA\H77I1.SAS7BDAT (2003 CLNK FILE) \****************************************************************************/ FOOTNOTE 'PROGRAM: C:\MEPS\PROG\EXAMPLE04.SAS'; LIBNAME CDATA V8 'C:\MEPS\DATA' ; TITLE1 'AHRQ MEPS DATA USERS WORKSHOP -- JULY 2006'; TITLE2 'COMPUTING NUMBER OF EVENTS ASSOCIATED WITH CONDITIONS'; PROC FORMAT; VALUE EVNUMF 0 = ' 0' 1-10 = ' 1-10' 11-25 = '11-25' 26-50 = '26-50' 51-HIGH = '51+'; RUN; DATA COND_NUM; SET CDATA.H78 (KEEP= CONDIDX ERNUM HHNUM IPNUM OBNUM OPNUM RXNUM); TOTNUM=(ERNUM+HHNUM+IPNUM+OBNUM+OPNUM+RXNUM); RUN; PROC SORT DATA= CDATA.H77I1 (KEEP= CONDIDX EVENTYPE) OUT= CLNK2003; BY CONDIDX; RUN; DATA COND_CNT ; SET CLNK2003; BY CONDIDX; ARRAY EVCNT{6} ERCNT HHCNT IPCNT OBCNT OPCNT RXCNT; IF FIRST.CONDIDX THEN DO XX = 1 TO 6; EVCNT{XX} = 0; END; IF EVENTYPE = 1 THEN OBCNT+1; ELSE IF EVENTYPE = 2 THEN OPCNT+1; ELSE IF EVENTYPE = 3 THEN ERCNT+1; ELSE IF EVENTYPE = 4 THEN IPCNT+1; ELSE IF EVENTYPE = 7 THEN HHCNT+1; ELSE IF EVENTYPE = 8 THEN RXCNT+1; IF LAST.CONDIDX THEN OUTPUT; RUN; PROC SORT DATA= COND_NUM; BY CONDIDX; RUN; PROC SORT DATA= COND_CNT; BY CONDIDX; RUN; DATA COND2003; MERGE COND_NUM (IN= A) COND_CNT (IN= B) END= ITSOVER; BY CONDIDX; ARRAY EVCNT{6} ERCNT HHCNT IPCNT OBCNT OPCNT RXCNT; DO XX = 1 TO 6; IF EVCNT{XX} = . THEN EVCNT{XX} = 0; END; TOTCNT=(ERCNT+HHCNT+IPCNT+OBCNT+OPCNT+RXCNT); DROP XX; IF A AND B THEN BOTH+1; ELSE IF A THEN JUSTA+1; ELSE IF B THEN JUSTB+1; IF ITSOVER THEN PUT BOTH= JUSTA= JUSTB= ; RUN; TITLE3 'evNUM FROM CONDITIONS FILE,evCNT FROM CLNK MATCHES'; TITLE4 'CONDITION LEVEL'; PROC FREQ DATA= COND2003; TABLES TOTNUM*TOTCNT ERNUM*ERCNT HHNUM*HHCNT IPNUM*IPCNT OBNUM*OBCNT OPNUM*OPCNT RXNUM*RXCNT / LIST MISSING ; FORMAT TOTNUM ERNUM HHNUM IPNUM OBNUM OPNUM RXNUM TOTCNT ERCNT HHCNT IPCNT OBCNT OPCNT RXCNT EVNUMF. ; RUN;