/****************************************************************************\
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;