*SUDAAN Code Example using BRFSS data * NOTE: This is PC-based Sudaan code used in producing * *Tables for the 1998 Summary Prevalence Report * * This program can be called from the program (TABLE98T.SAS)* * to produce estimates and output datasets * * TSO MEMBER : .SUMPREV.REPORT987(SUD987T97 ) * * PURPOSE : GENERATE PREVALANCE FOR RISK FACTORS * * FOR THE 1998 SUMMARY PREVALENCE REPORT * * PROGRAMMER : CHARLENE SMITH * * MODIFIED BY : WIL MURPHY * * DATE : JUNE 10, 1999 * * INPUT FILES : BRFS DATA FOR CURRENT AND PREVIOUS YEARS * * OUTPUT FILES : TABLES OF PREVELANCE FOR RISK FACTOR * * 1) ALL STATES COMBINED 2) SEX GROUPS * * 3) TWO-YEARS PREVALENCE DIFFERENCES. * * COMPARE 1998 TO 1997. * * ASCII FILE OF TABLES GENERATE TO DOWNLOAD * * NOTE: 1998 DATA DOES NOT INCLUDE RI (PIT) * * NEW TABLE LAYOUT - revised Oct 10, 1995 * ; *OPTIONS MACROGEN SYMBOLGEN; OPTIONS NOCENTER NODATE NONUMBER; %MACRO SESUTOT; * EXECUTE SUDAAN AND PRINT TOTAL TABLE; * DEFINING THE RISK FACTOR OF INTEREST; * PULLING IN THE CODE FOR RISK FACTOR; %RISKCODE; * SORTING REQUIRED BY SUDAAN FOR VARIABLE * DESCRIBING SAMPLING LEVELS ; PROC SORT DATA=RISKFT; BY _STSTR _PSU _RECORD; * OBTAIN PREVALANCE PERCENTS AND SE FOR TOTAL AND SEX GROUPS; PROC DESCRIPT DATA=RISKFT FILETYPE=SAS DESIGN=WR NOPRINT ; OUTPUT NSUM PERCENT SEPERCENT /FILENAME=SESUSTAT; VAR RISK; CATLEVEL 1; SUBGROUP _STATE SEX; LEVELS 72 2; SUBPOPN (RISK < 7); NEST _STSTR _PSU / MISSUNIT; WEIGHT _FINALWT; TABLES _STATE _STATE*SEX; *proc print data=_last_(obs=50); * RENAME VARIABLES TO BE THE SAME AS IN SESUDAAN FOR THE CONVERSION; DATA SESUSTAT; SET SESUSTAT; RENAME NSUM=SAMSIZE PERCENT=STATIST SEPERCEN=STDERR; *proc print data=_last_(obs=100); DATA RISK1T RISK1M RISK1F; SET SESUSTAT; * REMOVING THE TOTAL RECORD AND UNWANTED LEVEL OF RISK FACTOR; IF SAMSIZE NE 0; IF _STATE NE 0;IF SEX NE 0; * IF STATIST NE 0; REMOVING CALIF FOR WOMENS HEALTH RUNS ONLY ; MAMM1 MAMM2 MAMM3 MAMM4 MAMM5 ; * IF _STATE EQ 6 THEN DELETE; * ROUNDING THE STATISTICS; STATIST=ROUND(STATIST,.01); STDERR=ROUND(STDERR,.01); * COMPUTING THE 95% CONFIDENCE INTERVAL FOR PERCENT; CIL=STATIST-1.96*STDERR; CIR=STATIST+1.96*STDERR; * CREATING DATA SETS OF TOTALS & SEX GROUPS FOR RISK FACTOR; IF TABLENO=1 THEN OUTPUT RISK1T; IF TABLENO=2 AND SEX=1 THEN OUTPUT RISK1M; IF TABLENO=2 AND SEX=2 THEN OUTPUT RISK1F; * KEEPING STATISTICS AND IDENIFICATION VARIABLE(_STATE); KEEP STATIST STDERR SAMSIZE _STATE CIL CIR; * SORT AND ORDERING FOR OUTPUT TO A DATASET FOR MAPPING; PROC SORT DATA=RISK1T OUT=SORTEDT; BY STATIST; DATA PREVRNKT(KEEP=_STATE RANKT); SET SORTEDT; RANKT=_N_; PROC SORT DATA=PREVRNKT; BY _STATE; * MERGING OF TOTAL AND SEX GROUPS DATASETS WITH RANKS AND STATISTICS; DATA STATWM.&RISKDATA; MERGE RISK1T PREVRNKT RISK1M (RENAME=(SAMSIZE=SAMSIZEM STATIST=STATISTM STDERR=STDERRM CIL=CILM CIR=CIRM)) RISK1F (RENAME=(SAMSIZE=SAMSIZEF STATIST=STATISTF STDERR=STDERRF CIL=CILF CIR=CIRF)) ; IF STATISTM NE 0; * REMOVING CASES WITH 0 PREVALENCES; BY _STATE; * GENERATE SUMMARY STATISTICS FOR PREVALENCE ESTIMATES FOR EACH * SEX GROUP; PROC UNIVARIATE DATA=STATWM.&RISKDATA NOPRINT; VAR STATIST STATISTM STATISTF; OUTPUT OUT=OUTSTAT N=N MEDIAN=MEDIANT MEDIANM MEDIANF RANGE=RANGET RANGEM RANGEF MIN=MINT MINM MINF MAX=MAXT MAXM MAXF; OUTPUT THE TOTAL TABLE FOR REPORT ; DATA _NULL_; SET STATWM.&RISKDATA OUTSTAT END=EOF; LENGTH STATE $ 14; * CONVERT FIPCODE TO STATE NAME; STATE=FIPNAME(_STATE); CURRENT=DATE(); * CONVERT DATE OF REPORT TO SAS DATE; * PRODUCE PREVALANCE TABLE FOR RISK FACTORS ; * TABLE THE PREVALANCE PERCENT, SAMPLE SIZE, S.E., DESIGN EFFECT; FILE PRINT HEADER=H NOTITLES; IF STATE=' ' THEN PUT / +26 'SUMMARY STATISTICS:' +3 'NO. OF PARTICIPANTS = ' N +1 'MEDIAN = ' MEDIANT 4.1 +1 'RANGE = ' MINT 4.1 '-' MAXT 4.1 +2 &OBJ2000 ; ELSE PUT +25 STATE $14. +7 SAMSIZE 4. +12 STATIST 4.1 +12 STDERR 4.1 +9 '(' CIL 4.1 ',' +1 CIR 4.1 ')' ; IF EOF THEN PUT +25 '* ' &DEFRISK @100 CURRENT WORDDATE. +1 ; FILE TABL98_1 NOTITLES; IF _N_=1 THEN LINK H; IF STATE=' ' THEN PUT / +26 'SUMMARY STATISTICS:' +3 'NO. OF PARTICIPANTS = ' N +1 'MEDIAN = ' MEDIANT 4.1 +1 'RANGE = ' MINT 4.1 '-' MAXT 4.1 +2 &OBJ2000 ; ELSE PUT +25 STATE $14. +7 SAMSIZE 4. +12 STATIST 4.1 +12 STDERR 4.1 +10 '(' CIL 4.1 ',' +1 CIR 4.1 ')' ; IF EOF THEN PUT +25 '* ' &DEFRISK @100 CURRENT WORDDATE. +1 ; RETURN; H: PUT @44 "&REPORTA 1998 BEHAVIORAL RISK FACTOR SURVEILLANCE DATA" / @36 'ESTIMATED PREVALENCE AND RELEVANT STATISTICS FOR ' &TITLAB1 '*' / @49 &TITLAB2 // +45 'SAMPLE' +26 'STANDARD' +6 '95% CONFIDENCE' / +25 'PARTICIPANT' +10 'SIZE' +11 'PERCENT' +11 'ERROR' +10 'INTERVAL' /; RETURN; %MEND SESUTOT; ** OUTPUT FOR SEX GROUP TABLE FOR PREVALENCE REPORT; %MACRO SEXGRP; DATA _NULL_; SET STATWM.&RISKDATA OUTSTAT END=EOF; LENGTH STATE $ 14; * CONVERT FIPCODE TO STATE NAME; STATE=FIPNAME(_STATE); CURRENT=DATE(); * CONVERT DATE OF REPORT TO SAS DATE; * PRODUCE PREVALANCE TABLE FOR RISK FACTORS ; * TABLE THE PREVALANCE PERCENT, SAMPLE SIZE, S.E., DESIGN EFFECT; FILE PRINT HEADER=H NOTITLES; IF STATE=' ' THEN PUT / +3 'SUMMARY STATISTICS:' +8 'NUMBER OF PARTICIPANTS = ' +4 N +25 'NUMBER OF PARTICIPANTS = ' +4 N / +30 'MEDIAN = ' +3 MEDIANM 4.1 +25 'MEDIAN = ' +3 MEDIANF 4.1 / +30 'RANGE = ' MINM 4.1 '-' MAXM 4.1 +22 'RANGE = ' MINF 4.1 '-' MAXF 4.1 ; ELSE PUT +1 STATE $14. +6 SAMSIZEM 4. +7 STATISTM 4.1 +8 STDERRM 4.1 +8 '(' CILM 4.1 ',' +1 CIRM 4.1 ')' +6 '*' +4 SAMSIZEF 4. +7 STATISTF 4.1 +8 STDERRF 4.1 +7 '(' CILF 4.1 ',' +1 CIRF 4.1 ')' ; IF EOF THEN PUT +1 '* ' &DEFRISK @100 CURRENT WORDDATE. +1 ; FILE TABL98_2 NOTITLES ; IF _N_=1 THEN LINK H; IF STATE=' ' THEN PUT / +3 'SUMMARY STATISTICS:' +8 'NUMBER OF PARTICIPANTS = ' +4 N +25 'NUMBER OF PARTICIPANTS = ' +4 N / +30 'MEDIAN = ' +3 MEDIANM 4.1 +25 'MEDIAN = ' +3 MEDIANF 4.1 / +30 'RANGE = ' MINM 4.1 '-' MAXM 4.1 +23 'RANGE = ' MINF 4.1 '-' MAXF 4.1 ; ELSE PUT +1 STATE $14. +6 SAMSIZEM 4. +7 STATISTM 4.1 +8 STDERRM 4.1 +6 '(' CILM 4.1 ',' +1 CIRM 4.1 ')' +5 '*' +4 SAMSIZEF 4. +7 STATISTF 4.1 +8 STDERRF 4.1 +5 '(' CILF 4.1 ',' +1 CIRF 4.1 ')' ; IF EOF THEN PUT +1 '* ' &DEFRISK @100 CURRENT WORDDATE. +1 ; RETURN; H: PUT @44 "&REPORTB 1998 BEHAVIORAL RISK FACTOR SURVEILLANCE DATA" / @32 'ESTIMATED PREVALENCE AND RELEVANT STATISTICS FOR ' &TITLAB1 '*' +1 '-BY SEX' / @49 &TITLAB2 / +19 '*' '------------------------' 'MALES' '----------------------' '*' '-----------------------' 'FEMALES' '----------------------' '*' / +20 'SAMPLE' +17 'STANDARD' +4 '95% CONFIDENCE' +2 '*' +3 'SAMPLE' +17 'STANDARD' +3 '95% CONFIDENCE' / +1 'PARTICIPANT' +9 'SIZE' +5 'PERCENT' +7 'ERROR' +9 'INTERVAL' +5 '*' +4 'SIZE' +5 'PERCENT' +7 'ERROR' +8 'INTERVAL' / +71 '*' ; RETURN; %MEND SEXGRP; **** TWO-YEAR DIFFERENCES OF PREVALENCE *; %MACRO YEARDIF; * EXECUTE SUDAAN AND PRINT TOTAL TABLE; * DEFINING THE RISK FACTOR OF INTEREST; DATA RISKFTP (KEEP=_STSTR _PSU _RECORD _FINALWT _STATE SEX &VAR1 RISK); *SET SUMPRV97.DBRFS97; SET SUMPRV96.DBRFS96; * PULLING IN THE CODE FOR RISK FACTOR; %RISKCODE * SORTING REQUIRED BY SUDAAN FOR VARIABLE * DESCRIBING SAMPLING LEVELS ; PROC SORT DATA=RISKFTP; BY _STSTR _PSU _RECORD; * OBTAIN PREVALANCE PERCENTS FOR TOTAL; PROC DESCRIPT DATA=RISKFTP FILETYPE=SAS DESIGN=WR NOPRINT ; OUTPUT NSUM PERCENT SEPERCENT /FILENAME=STATP; VAR RISK; CATLEVEL 1; SUBGROUP _STATE; LEVELS 72; SUBPOPN (RISK < 7); NEST _STSTR _PSU / MISSUNIT; WEIGHT _FINALWT; TABLES _STATE; *proc print data=_last_(obs=50); * RENAME VARIABLES TO BE THE SAME AS IN SESUDAAN FOR THE CONVERSION; DATA STATP; SET STATP; RENAME NSUM=SAMSIZE PERCENT=STATIST SEPERCEN=STDERR; *proc print data=_last_(obs=100); DATA RISK1TPY; SET STATP; * REMOVING THE TOTAL RECORD AND UNWANTED LEVEL OF RISK FACTOR; IF SAMSIZE NE 0; IF _STATE NE 0; REMOVING CALIF FOR WOMENS HEALTH RUNS ONLY ; MAMM1 MAMM2 MAMM3 MAMM4 MAMM5 ; * IF _STATE EQ 6 THEN DELETE; * ROUNDING THE STATISTICS; STATIST=ROUND(STATIST,.01); RENAME STATIST=STATISTP; * NOT TO ERASE THE CURRENT STAT DURING; * MERGING; PROC SORT DATA=RISK1T; * FROM FIRST PART OF PROGRAM (SESUTOT); BY _STATE; PROC SORT DATA=RISK1TPY; BY _STATE; DATA TEMP; MERGE RISK1T(IN=A) RISK1TPY(IN=B); * MERGE CURRENT & PREVIOUS YEARS; BY _STATE; IF A; DATA _NULL_; SET TEMP END=EOF; LENGTH STATE $ 14; * CONVERT FIPCODE TO STATE NAME; *REMOVING NON PARTICIPANTS FOR THE YEAR DATA; *IF STATIST EQ 0 THEN DELETE; IF STATIST EQ 0 THEN STATIST=.; IF STATISTP EQ 0 THEN STATISTP=.; * CALCULATING THE DIFFERENCE FROM PREVIOUS TO CURRENT; IF STATISTP NE 0 THEN DIF1 = STATIST - STATISTP; STATE=FIPNAME(_STATE); * CONVERTING TO CHARACTER; * CONVERTING STATISTICS TO CHARACTER TO INSERT N/A; CSTAT=PUT(STATIST,4.1); CSTATP=PUT(STATISTP,4.1); CDIF1=PUT(DIF1,5.1); *IF CSTAT= ' . ' THEN CSTAT=' N/A '; IF CSTAT= ' . ' THEN DELETE; IF CSTATP=' . ' THEN CSTATP=' N/A '; IF CDIF1=' . ' THEN CDIF1=' N/A '; * IF (CSTAT= ' . ') AND (CSTATP=' . ') AND (CDIF1=' . ') THEN DELETE; CURRENT=DATE(); * CONVERT DATE OF REPORT TO SAS DATE; * PRODUCE PREVALANCE DIFFERENCES TABLE FOR RISK FACTORS; FILE PRINT HEADER=H NOTITLES; PUT +43 STATE $14. +8 CSTATP $5. +7 CSTAT $5. +7 CDIF1 $6. ; IF EOF THEN PUT / +43 '* ' &DEFRISK / +44 'N/A - NOT AVAILABLE' @100 CURRENT WORDDATE. +1 ; FILE TABL98_3 NOTITLES ; IF _N_=1 THEN LINK H; PUT +43 STATE $14. +8 CSTATP $5. +7 CSTAT $5. +7 CDIF1 $6. ; IF EOF THEN PUT / +43 '* ' &DEFRISK / +44 'N/A - NOT AVAILABLE' @100 CURRENT WORDDATE. +1 ; RETURN; H: PUT @48 "&REPORTC 1998 BEHAVIORAL RISK FACTOR SURVEILLANCE DATA" / @51 'PREVALENCE DIFFERENCES FROM 1996 TO 1998' / @59 &TITLAB1 '*' / @46 &TITLAB2 / @52 ' ' / +65 '1996' +8 '1998' +8 'PERCENT' / +43 'PARTICIPANT' +10 'PERCENT' +5 'PERCENT' +5 'DIFFERENCE' /; RETURN; %MEND YEARDIF;