*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;
国产精品久久久久久一级毛片