/****/ /* PROGRAM: Example SUDAAN Analysis Programs.SAS */ /* */ /* PURPOSE: THIS PROGRAM PROVIDES EXAMPLE ANALYSIS CODE FOR PRODUCING */ /* ESTIMATES FROM THE 2023 NIS-CHILD PUF USING SAS-CALLABLE */ /* SUDAAN. THE PROGRAM IS DIVIDED INTO FIVE SECTIONS: */ /* */ /* EXAMPLE 1: PRODUCE ESTIMATION AREA ESTIMATES AND STANDARD ERRORS */ /* FOR P_UTD431H314_ROUT_S */ /* */ /* EXAMPLE 2: PRODUCE STATE ESTIMATES AND STANDARD ERRORS */ /* FOR P_UTD431H314_ROUT_S */ /* */ /* EXAMPLE 3: PRODUCE A TABLE OF HAD_CPOX BY STATE FOR ALL HOUSEHOLD */ /* COMPLETES USING RDDWT_C */ /* */ /* EXAMPLE 4: PRODUCE A TABLE OF P_UTD431H314_ROUT_S BY INCPOV1 */ /* BY RACE_K */ /* */ /* EXAMPLE 5: PRODUCE A BAR CHART OF P_UTD431H314_ROUT_S BY */ /* INCPOV1 BY RACE_K */ /* */ /* SUDAAN NOTES: */ /* 1. ALL VARIABLES USED MUST BE NUMERIC. */ /* 2. VARIABLES IN THE SUBGROUP STATEMENT MUST HAVE VALUES 1,2,..K */ /* WHERE K IS THE NUMBER OF LEVELS FOR EACH VARIABLE. */ /* 3. DATA MUST BE SORTED ACCORDING TO THE SAMPLE DESIGN VARIABLES */ /* (STRATUM AND PRIMARY SAMPLING UNIT), SPECIFIED IN THE */ /* NEST STATEMENT. */ /****/ options ps = 78 ls = 90 obs = max; *--- ASSIGN SAS LIBRARIES AND FILE NAMES ---*; libname dd 'c:\nispuf23'; *--- Specify path to sas dataset ---*; libname library 'c:\nispuf23'; *--- If dataset was created with formats stored ---*; %let out = 'c:\nispuf23'; *--- Specify output location ---*; libname out &out.; *--- PERMANENTLY SPECIFY PATH TO LIBRARY ---*; *--- OTHERWISE COMMENT THIS STATEMENT OUT ---*; %let yy = 23; *--- YEAR OF DATA COLLECTION ---*; %let in_file = dd.nispuf&yy.; *--- NAME OF SAS DATASET ---*; %let ESTIAP = ESTIAP&yy.; * --- ESTIMATION AREA VARIABLE TO USE ---*; %let RDDWT = RDDWT_C; * --- Weight to use for household variables (RDDWT_C is the single-frame cellular phone weight excluding territories. Use RDDWT_C_TERR to include territories) ---*; %let PROVWT = PROVWT_C; * --- Weight to use for provider variables (PROVWT_C is the single-frame cellular phone weight excluding territories. Use PROVWT_C_TERR to include territories) ---*; %let STRAT = STRATUM; * --- STRATUM variable to use for variance estimation (use STRATUM for all estimation) ---*; *--- DEFINE FORMATS USED FOR ANALYSIS ---*; proc format; value putd431h314f 1 = "4:3:1:3:3:1:4 Up-to-Date" 2 = "Not 4:3:1:3:3:1:4 Up-to-Date" ; value estiapf 0 = "U.S. Total" 1 = "CT" 2 = "MA" 4 = "ME" 5 = "NH" 6 = "RI" 7 = "VT" 8 = "NJ" 10 = "NY-Rest of State" 11 = "NY-City of New York" 12 = "DC" 13 = "DE" 14 = "MD" 16 = "PA-Rest of State" 17 = "PA-Philadelphia County" 18 = "VA" 19 = "WV" 20 = "AL" 22 = "FL" 25 = "GA" 27 = "KY" 28 = "MS" 29 = "NC" 30 = "SC" 31 = "TN" 34 = "IL-Rest of State" 35 = "IL-City of Chicago" 36 = "IN" 38 = "MI" 40 = "MN" 41 = "OH" 44 = "WI" 46 = "AR" 47 = "LA" 49 = "NM" 50 = "OK" 51 = "TX-Rest of State" 54 = "TX-City of Houston" 55 = "TX-Bexar County" 56 = "IA" 57 = "KS" 58 = "MO" 59 = "NE" 60 = "CO" 61 = "MT" 62 = "ND" 63 = "SD" 64 = "UT" 65 = "WY" 66 = "AZ" 68 = "CA" 72 = "HI" 73 = "NV" 74 = "AK" 75 = "ID" 76 = "OR" 77 = "WA" 106 = "Puerto Rico" ; value STATEf 0 = "U.S. Total" 1 = "Alabama" 2 = "Alaska" 4 = "Arizona" 5 = "Arkansas" 6 = "California" 8 = "Colorado" 9 = "Connecticut" 10 = "Delaware" 11 = "District of Columbia" 12 = "Florida" 13 = "Georgia" 15 = "Hawaii" 16 = "Idaho" 17 = "Illinois" 18 = "Indiana" 19 = "Iowa" 20 = "Kansas" 21 = "Kentucky" 22 = "Louisiana" 23 = "Maine" 24 = "Maryland" 25 = "Massachusetts" 26 = "Michigan" 27 = "Minnesota" 28 = "Mississippi" 29 = "Missouri" 30 = "Montana" 31 = "Nebraska" 32 = "Nevada" 33 = "New Hampshire" 34 = "New Jersey" 35 = "New Mexico" 36 = "New York" 37 = "North Carolina" 38 = "North Dakota" 39 = "Ohio" 40 = "Oklahoma" 41 = "Oregon" 42 = "Pennsylvania" 44 = "Rhode Island" 45 = "South Carolina" 46 = "South Dakota" 47 = "Tennessee" 48 = "Texas" 49 = "Utah" 50 = "Vermont" 51 = "Virginia" 53 = "Washington" 54 = "West Virginia" 55 = "Wisconsin" 56 = "Wyoming" 72 = "Puerto Rico" ; value hadcpoxf 1 = "Yes" 2 = "No" ; value incpvr2f 1 = "Above Poverty, > $75,000" 2 = "Above Poverty, < = $75,000" 3 = "Below Poverty" 4 = "Unknown" ; value race_kf 1 = "White Only" 2 = "Black Only" 3 = "Other/Mult Race" ; run; data nispuf; set &in_file. (keep = SEQNUMHH SEQNUMC &ESTIAP. &RDDWT. &PROVWT. &STRAT. STATE P_UTD431H314_ROUT_S HAD_CPOX RACE_K INCPOV1); if P_UTD431H314_ROUT_S = 0 then P_UTD431H314_ROUT_S = 2; *--- Convert P_UTD431H314_ROUT_S = 0 to P_UTD431H314_ROUT_S = 2 ---*; NSEQNUMHH = 1*SEQNUMHH; *--- Convert household ID SEQNUMHH from character to numeric ---*; format &ESTIAP. ESTIAPf. STATE STATEf. P_UTD431H314_ROUT_S putd431h314f. HAD_CPOX hadcpoxf. INCPOV1 incpvr2f. RACE_K race_kf.; run; ** EXAMPLE 1: PRODUCE ESTIMATION AREA ESTIMATES AND STANDARD ERRORS FOR P_UTD431H314_ROUT_S **; proc sort data = nispuf;by &STRAT. NSEQNUMHH;run; *Sort by nest variables; proc crosstab data = nispuf filetype = sas design = wr; weight &PROVWT.; nest &STRAT. NSEQNUMHH; subgroup &ESTIAP. P_UTD431H314_ROUT_S; levels 106 2; tables &ESTIAP. * P_UTD431H314_ROUT_S; print nsum wsum rowper serow / style = nchs; rtitle "4:3:1:3:3:1:4 Estimates by Estimation Area"; rformat &ESTIAP. estiapf.; rformat P_UTD431H314_ROUT_S putd431h314f.; output rowper serow / filename = sud_est filetype = sas replace; run; proc print data = sud_est (where = (P_UTD431H314_ROUT_S = 1 and rowper ne .)) noobs label; var &ESTIAP. rowper serow; label rowper = 'Percent 4:3:1:3:3:1:4 Up-to-Date' serow = 'Standard Error'; title "4:3:1:3:3:1:4 Estimates by Estimation Area"; run; EXAMPLE 2: PRODUCE STATE ESTIMATES AND STANDARD ERRORS FOR P_UTD431H314_ROUT_S ; proc sort data = nispuf;by &STRAT. NSEQNUMHH;run; *Sort by nest variables; proc crosstab data = nispuf filetype = sas design = wr; weight &PROVWT.; nest &STRAT. NSEQNUMHH; subgroup STATE P_UTD431H314_ROUT_S; levels 72 2; tables STATE * P_UTD431H314_ROUT_S; print nsum wsum rowper serow /style = nchs; rtitle "4:3:1:3:3:1:4 Estimates by STATE"; rformat STATE STATEf.; rformat P_UTD431H314_ROUT_S putd431h314f.; output rowper serow / filename = sud_est2 filetype = sas replace; run; *** Exclude 3,7,14,43,52,57-71,73-78 since there are no states with these FIPS codes ***; proc print data = sud_est2 (where = (P_UTD431H314_ROUT_S = 1 and rowper ne . and STATE notin (3,7,14,43,52) and not(57 <= STATE <= 71) and not (73 <= STATE <= 78))) label noobs; format STATE STATEf.; var STATE rowper serow; label rowper = 'Percent 4:3:1:3:3:1:4 Up-to-Date' serow = 'Standard Error'; title "4:3:1:3:3:1:4 Estimates by State"; run; EXAMPLE 3: PRODUCE A TABLE OF HAD_CPOX BY STATE FOR ALL HOUSEHOLD COMPLETES USING RDDWT_C ; proc sort data = nispuf;by &STRAT. NSEQNUMHH;run; *Sort by nest variables; proc crosstab data = nispuf filetype = sas design = wr; weight &RDDWT.; nest &STRAT. NSEQNUMHH; subgroup STATE HAD_CPOX; levels 72 2; tables STATE * HAD_CPOX; print nsum wsum rowper serow / style = nchs; rtitle "HAD_CPOX Estimates by State"; rtitle "Weighted by &RDDWT."; rformat STATE STATEf.; rformat HAD_CPOX hadcpoxf.; output rowper serow / filename = sud_est3 filetype = sas replace; run; *** Exclude 3,7,14,43,52,57-71,73-78 since there are no states with these FIPS codes ***; proc print data = sud_est3 (where = (HAD_CPOX = 1 and rowper ne . & STATE not in (3,7,14,43,52) and not (57 <= STATE <= 71) and not (73 <= STATE <= 78))) label noobs; format STATE STATEf.; var STATE rowper serow; label rowper = 'Percent HAD_CPOX = Yes' serow = 'Standard Error'; title "Child had Chicken Pox by State"; run; EXAMPLE 4: PRODUCE A TABLE OF P_UTD431H314_ROUT_S BY INCPOV1 BY RACE_K ; proc sort data = nispuf;by &STRAT. NSEQNUMHH;run; *Sort by nest variables; proc freq data = nispuf; where &PROVWT. ne .; tables P_UTD431H314_ROUT_S INCPOV1 RACE_K; title "Table 4A. Q1/20&yy. - Q4/20&yy.: Unweighted Frequencies"; run; proc crosstab data = nispuf filetype = sas design = wr; weight &PROVWT; nest &STRAT. NSEQNUMHH; subgroup INCPOV1 RACE_K P_UTD431H314_ROUT_S; levels 4 3 2; tables (INCPOV1 * RACE_K * P_UTD431H314_ROUT_S); print nsum wsum rowper = "4:3:1:3:3:1:4 Up-to-Date (rowper)" serow = "Standard Error (serow)" /style = nchs; rtitle "Table 4B. Q1/20&yy. - Q4/20&yy., Percent 4:3:1:3:3:1:4 Up-to-Date and Estimated Standard Errors"; rtitle "Weighted by &PROVWT."; rformat P_UTD431H314_ROUT_S putd431h314f.; rformat incpov1 incpvr2f.; rformat race_k race_kf.; output rowper serow / filename = sud_est4 filetype = sas replace; run; *Save % UTD estimates (not S.E.'s) for use in Example 5; data out.sud_est4; set sud_est4 (where = (P_UTD431H314_ROUT_S = 1 & incpov1 > 0 & race_k > 0)); keep incpov1 race_k rowper serow; label rowper = '4:3:1:3:3:1:4 Up-to-Date'; format rowper 5.2 serow 5.2 RACE_K race_kf. INCPOV1 incpvr2f.; run; proc print data = out.sud_est4 label; format race_k race_kf.; format incpov1 incpvr2f.; title "Table 4B. Q1/20&yy. - Q4/20&yy.: 4:3:1:3:3:1:4 Estimates by INCPOV1 by RACE_K"; run; EXAMPLE 5: PRODUCE A BAR CHART OF P_UTD431H314_ROUT_S BY INCPOV1 BY RACE_K ; data sud_est4; set out.sud_est4; label RACE_K = 'Race of Child' INCPOV1 = 'Poverty Status'; filename odsout &out.; ods listing close; *Set the graphics environment; goptions reset = global gunit = pct border ftext = swissb htitle = 4 htext = 1.5 device = gif; ods html body = 'graph_4_sud.html' path = odsout; run; title1 h = 12pt "Percentage of Children Up-to-Date with 4:3:1:3:3:1:4 Vaccine Series"; title2 h = 12pt "by Race and Poverty Status, National Immunization Survey - Child, 20&yy."; footnote j = r'graph_4sud'; proc sgplot data = sud_est4; styleattrs datacolors = (wheat lightpink forestgreen) datacontrastcolors = (wheat lightpink forestgreen) datalinepatterns = (solid); vbar INCPOV1 / response = rowper group = RACE_K groupdisplay = cluster stat = mean barwidth = 0.8; xaxis display = (noticks); yaxis grid; keylegend / across = 1 position = top; run; ods html close; ods listing;