/**************************************************************************************************************************************** Imputation SAS code for Exemplar 6 NOTE that you need to run the program ex6formats.sas before you can open the data files here ALSO to run the IVEWARE software you need to close all advanced editor windows and use only the old program editor CHANGE the libname to shere your data sets are stored proc contents data=ex6.ex6 short position;run; ****************************************************************************************************************************************/ libname ex6 'C:\Documents and Settings\gillian raab\My Documents\aprojects\peaslaptop\ex6datafiles\data' ; /*------------------------------------------------------------------- first a small analysis using only offending prelaence and gender -----------------------------------------------------------------------*/ data check; set ex6.ex6detail; format _numeric_ 4.0; array vars yaybus01--yfvwep02; i=0; do over vars; i=i+1; if i^=round(i/2)*2 then do; vars=2-vars; last=vars; end; else if last=0 then do; vars=.; end; end; run; proc freq; tables _numeric_;run; %impute(name=ivesetup1, dir=C:\Documents and Settings\gillian raab\My Documents\aprojects\peaslaptop\ex6datafiles\program_code ,setup=new); title Multiple imputation prevalence only; datain prev; dataout ex6.previmp ; default categorical; transfer caseid; iterations 5; multiples 2; print all; seed 2001; run; /*------------------------------------------------------------------------- now the larger data set ------------------------------------------------------------------------------*/ %impute(name=ivesetup2, dir=C:\Documents and Settings\gillian raab\My Documents\aprojects\peaslaptop\ex6datafiles\program_code ,setup=new); title Multiple imputation all variables; datain ex6.ex6; dataout bigimp1; default categorical; count dvar1 dvar2 dvar3 dvar4 dvar5 dvar6; continuous dvol1 dvol2 dvol3 dvol4 dvol5 dvol6; bounds dvol1 (>0) dvol2 (>0) dvol3 (>0) dvol4 (>0) dvol5 (>0) dvol6 (>0); restrict dvol1 (dprev1=1) dvol2(dprev2=1) dvol3 (dprev3=1) dvol4 (dprev4=1) dvol5 (dprev5=1) dvol6 (dprev6=1) dvar1 (dprev1=1) dvar2(dprev2=1) dvar3 (dprev3=1) dvar4 (dprev4=1) dvar5 (dprev5=1) dvar6 (dprev6=1) ; transfer caseid; iterations 10; seed 2001 ;run; %impute(name=ivesetup2, dir=C:\Documents and Settings\gillian raab\My Documents\aprojects\peaslaptop\ex6datafiles\program_code ,setup=new); title Multiple imputation all variables; datain ex6.ex6; dataout bigimp2; default categorical; count dvar1 dvar2 dvar3 dvar4 dvar5 dvar6; continuous dvol1 dvol2 dvol3 dvol4 dvol5 dvol6; bounds dvol1 (>0) dvol2 (>0) dvol3 (>0) dvol4 (>0) dvol5 (>0) dvol6 (>0); restrict dvol1 (dprev1=1) dvol2(dprev2=1) dvol3 (dprev3=1) dvol4 (dprev4=1) dvol5 (dprev5=1) dvol6 (dprev6=1) dvar1 (dprev1=1) dvar2(dprev2=1) dvar3 (dprev3=1) dvar4 (dprev4=1) dvar5 (dprev5=1) dvar6 (dprev6=1) ; transfer caseid; iterations 10; seed 766 ;run; %impute(name=ivesetup2, dir=C:\Documents and Settings\gillian raab\My Documents\aprojects\peaslaptop\ex6datafiles\program_code ,setup=new); title Multiple imputation all variables; datain ex6.ex6; dataout bigimp3; default categorical; count dvar1 dvar2 dvar3 dvar4 dvar5 dvar6; continuous dvol1 dvol2 dvol3 dvol4 dvol5 dvol6; bounds dvol1 (>0) dvol2 (>0) dvol3 (>0) dvol4 (>0) dvol5 (>0) dvol6 (>0); restrict dvol1 (dprev1=1) dvol2(dprev2=1) dvol3 (dprev3=1) dvol4 (dprev4=1) dvol5 (dprev5=1) dvol6 (dprev6=1) dvar1 (dprev1=1) dvar2(dprev2=1) dvar3 (dprev3=1) dvar4 (dprev4=1) dvar5 (dprev5=1) dvar6 (dprev6=1) ; transfer caseid; iterations 10; seed 07665 ;run; %impute(name=ivesetup2, dir=C:\Documents and Settings\gillian raab\My Documents\aprojects\peaslaptop\ex6datafiles\program_code ,setup=new); title Multiple imputation all variables; datain ex6.ex6; dataout bigimp4; default categorical; count dvar1 dvar2 dvar3 dvar4 dvar5 dvar6; continuous dvol1 dvol2 dvol3 dvol4 dvol5 dvol6; bounds dvol1 (>0) dvol2 (>0) dvol3 (>0) dvol4 (>0) dvol5 (>0) dvol6 (>0); restrict dvol1 (dprev1=1) dvol2(dprev2=1) dvol3 (dprev3=1) dvol4 (dprev4=1) dvol5 (dprev5=1) dvol6 (dprev6=1) dvar1 (dprev1=1) dvar2(dprev2=1) dvar3 (dprev3=1) dvar4 (dprev4=1) dvar5 (dprev5=1) dvar6 (dprev6=1) ; transfer caseid; iterations 10; seed 1939 ;run; %impute(name=ivesetup2, dir=C:\Documents and Settings\gillian raab\My Documents\aprojects\peaslaptop\ex6datafiles\program_code ,setup=new); title Multiple imputation all variables; datain ex6.ex6; dataout bigimp5; default categorical; count dvar1 dvar2 dvar3 dvar4 dvar5 dvar6; continuous dvol1 dvol2 dvol3 dvol4 dvol5 dvol6; bounds dvol1 (>0) dvol2 (>0) dvol3 (>0) dvol4 (>0) dvol5 (>0) dvol6 (>0); restrict dvol1 (dprev1=1) dvol2(dprev2=1) dvol3 (dprev3=1) dvol4 (dprev4=1) dvol5 (dprev5=1) dvol6 (dprev6=1) dvar1 (dprev1=1) dvar2(dprev2=1) dvar3 (dprev3=1) dvar4 (dprev4=1) dvar5 (dprev5=1) dvar6 (dprev6=1) ; transfer caseid; iterations 10; seed 7160 ;run; data ex6.bigimp; set bigimp2 (in=in1) bigimp3 (in=in2) bigimp4 (in=in3) bigimp5 (in=in4); if in1 then _mult_=1; else if in2 then _mult_=2; else if in3 then _mult_=3; else if in4 then _mult_=4; run; proc means ; * get univariate means all respondents ; var dprev1-dprev6 ; by _mult_; run; proc mi data=forimp OUT=IMPUTEDmi nimpute=10; * imputation prevalence only no limits; VAR dprev1-dprev6 ; mcmc nbiter =200 niter=100 timeplot acfplot; RUN; data imputedmi2; set imputedmi; array dp dprev1-dprev6; do i=1 to 6; if dp[i]>0.5 then dp[i]=1; else dp[i]=0; end; run; proc tabulate data=imputedmi2; class _imputation_ dprev5-dprev6 dprevmiss5-dprevmiss6; table _imputation_,(dprevmiss5*dprev5 dprevmiss6*dprev6)*n*f=4.0; run; proc mi data=forimp OUT=IMPUTEDmi nimpute=10 maximum =1 1 1 1 1 1 minimum= 0 0 0 0 0 0; * imputation prevalence only with limits; VAR dprev1-dprev6 ; mcmc nbiter =200 niter=100 timeplot acfplot; RUN; data imputedmi2; set imputedmi; array dp dprev1-dprev6; do i=1 to 6; if dp[i]>0.5 then dp[i]=1; else dp[i]=0; end; run; proc tabulate data=imputedmi2; class _imputation_ dprev5-dprev6 dprevmiss5-dprevmiss6; table _imputation_,(dprevmiss5*dprev5 dprevmiss6*dprev6)*n*f=4.0; run; proc freq data=ex6.ex6; * check out coding for proc MI; table YZLEAVE SCSMKY80 RcALCY80 SCDRGP11 GENDER ETHGP SAAGEGP SZALLPER HZRESPRE SZINDEP SZABS04 HZEVREFI DUM: /missing; run; /* CODES YZLEAVE HZRESPRE SZINDEP SZABS04 HZEVREFI 1 2 SZALLPER 0 1 2 SASMKY80 etc 0 0.5 1 3 7 SADRGP10 ETC 1 2 */ proc mi data=ex6.ex6 OUT=IMPUTEDmi maximum= 9 9 9 9 9 9 1 1 1 1 1 1 ; VAR dvol1-dvol6 dvar1-dvar6 SCDRGP11 GENDER ETHGP SAAGEGP SZALLPER HZRESPRE SZINDEP SZABS04 HZEVREFI YZLEAVE SCSMKY80 RcALCY80 mcmc nbiter =200 niter=100 timeplot acfplot; RUN; data test; set imputedmi; if dprev6=. then imp6=1; else imp6=0; ;run; proc sort; by imp6; run; proc gchart data=test; hbar dvar6; by imp6; run; data test; set imputedmi; if dprev5=.;run; proc gchart data=test; hbar dvol5 dvar5; run; proc freq data=ex6.ex6; table dvar: dvol: ; run; /* NOW GET BACK TO CODES USED */ proc sort data=imputedmi out=test (keep=caseid dprev6 dvar6 dvol6); by caseid _imputation_; run; DATA IMPUTEDMIC; SET IMPUTEDMI ; if dprev6=. then imp6=1; else imp6=0; if dprev5=. then imp5=1; else imp5=0; array dvar [6]; array dvol [6]; array Dprev [6]; DO I = 1 TO 6; IF dvar[I]<=0 OR dvol[I]<=0 THEN DO; dvar[I]=0; dvol[I]=0; DPREV[I]=0; END; ELSE DPREV[I]=1; END; ARRAY SM SCSMKY80 ;*RECODE SMOKING VARIABLES; DO OVER SM; IF SM<=0.25 THEN SM=0; ELSE IF SM<=0.75 THEN SM=0.5; ELSE IF SM<=2 THEN SM=1; ELSE IF SM<=5 THEN SM=3; ELSE SM=7; END; ARRAY RND SCDRGP11 GENDER ETHGP SAAGEGP SZALLPER HZRESPRE SZINDEP SZABS04 RcALCY80 HZEVREFI YZLEAVE; DO OVER RND; RND=ROUND(RND); END; RUN; data test; set imputedmic; ;run; proc sort data=test; by imp6; proc gchart data=test; vbar dvol6; by imp6; run; data test; set imputedmic; if dprev5=.;run; proc gchart data=test; hbar dvol5 dvar5; run; PROC FORMAT; VALUE ANY 0='NO' >0-HIGH='SOME'; PROC FREQ DATA=IMPUTEDMIC; TABLE dvar6*dvol6/NOROW NOCOL NOPERCENT; FORMAT dvar6 dvol6 ANY.; RUN; PROC FREQ DATA=IMPUTEDMI; TABLE dvar6;RUN; PROC FREQ DATA=IMPUTEDMIC; TABLE SESMKY80 SFSMKY80;RUN; PROC FREQ DATA=ex6.ex6; TABLE SESMKY80 SFSMKY80;RUN; DATA IMPUTEGIRLS imputeboys; SET IMPUTEDMIC; IF GENDER=1 then output imputeboys; else output imputegirls; RUN; proc freq data=imputeboys; table dprev6*_imputation_; run; PROC CORR DATA=IMPUTEGIRLS COV OUT=OUTCOV(TYPE=COV) NOCORR ; VAR dvar: dvol: DPREV:; BY _IMPUTATION_; RUN; PROC MIANALYZE DATA=OUTCOV; VAR dvol1 dvol2 dvol3 dvol4 dvol5 dvol6; RUN; PROC MIANALYZE DATA=OUTCOV; VAR dprev1 dprev2 dprev3 dprev4 dprev5 dprev6; RUN; PROC MIANALYZE DATA=OUTCOV; VAR dvar1 dvar2 dvar3 dvar4 dvar5 dvar6; RUN; PROC CORR DATA=IMPUTEboys COV OUT=OUTCOV(TYPE=COV) NOCORR ; VAR dvar: dvol: DPREV:; BY _IMPUTATION_; RUN; PROC MIANALYZE DATA=OUTCOV; VAR dvol1 dvol2 dvol3 dvol4 dvol5 dvol6; RUN; PROC MIANALYZE DATA=OUTCOV; VAR DPREV1 DPREV2 DPREV3 DPREV4 DPREV5 DPREV6; RUN; PROC MIANALYZE DATA=OUTCOV; VAR dvar1 dvar2 dvar3 dvar4 dvar5 dvar6; RUN;