/**************************************************************************************************************************************** Imputation SAS code for Exemplar 6 tHIS ONE IMPUTES FROM THE big DATA FILE 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.ex6DETAIL short position;run; ****************************************************************************************************************************************/ libname ex6 'C:\Documents and Settings\gillian raab\My Documents\aprojects\peaslaptop\ex6datafiles\data' ; /*------------------------------------------------------------------ proc contents data=ex6.ex6detail short; run; --------------------------------------------------------------------*/ title 'checking imputed data'; data new; set ex6.detailimpmi; array vars YFYARS02 YFYBFT02 YFYBOP02 YFYCBK02 YFYDRG02 YFYFRD02 YFYHBK02 YFYHIT02 YFYJRD02 YFYPET02 YFYRAB02 YFYROB02 YFYRST02 YFYRST22 YFYSHP02 YFYSKV02 YFYVND02 YFYWEP02; array impv YFYARSi YFYBFTi YFYBOPi YFYCBKi YFYDRGi YFYFRDi YFYHBKi YFYHITi YFYJRDi YFYPETi YFYRABi YFYROBi YFYRSTi YFYRST2i YFYSHPi YFYSKVi YFYVNDi YFYWEPi; do over vars; impv=vars;end; keep YFYARSi YFYBFTi YFYBOPi YFYCBKi YFYDRGi YFYFRDi YFYHBKi YFYHITi YFYJRDi YFYPETi YFYRABi YFYROBi YFYRSTi YFYRST2i YFYSHPi YFYSKVi YFYVNDi YFYWEPi caseid _mult_; run; proc sort data=new; by caseid; run; data check2; merge check new check3; by caseid; array vars YFYARS02 YFYBFT02 YFYBOP02 YFYCBK02 YFYDRG02 YFYFRD02 YFYHBK02 YFYHIT02 YFYJRD02 YFYPET02 YFYRAB02 YFYROB02 YFYRST02 YFYRST22 YFYSHP02 YFYSKV02 YFYVND02 YFYWEP02; array impv YFYARSi YFYBFTi YFYBOPi YFYCBKi YFYDRGi YFYFRDi YFYHBKi YFYHITi YFYJRDi YFYPETi YFYRABi YFYROBi YFYRSTi YFYRST2i YFYSHPi YFYSKVi YFYVNDi YFYWEPi; array err YFYARSerr YFYBFTerr YFYBOPerr YFYCBKerr YFYDRGerr YFYFRDerr YFYHBKerr YFYHITerr YFYJRDerr YFYPETerr YFYRABerr YFYROBerr YFYRSTerr YFYRSTerr YFYSHPerr YFYSKVerr YFYVNDerr YFYWEPerr; anymiss=0; do i=1 to 18; if vars[i]=. then anymiss=1; end; if anymiss=0 then do i=1 to 18; err[i]=0; if abs(vars[i]-impv[i])>0.001 then do; put caseid i; anyerr=1; err[i]=1;end; end; keep caseid miss6 YFYARS02 YFYBFT02 YFYBOP02 YFYCBK02 YFYDRG02 YFYFRD02 YFYHBK02 YFYHIT02 YFYJRD02 YFYPET02 YFYRAB02 YFYROB02 YFYRST02 YFYRST22 YFYSHP02 YFYSKV02 YFYVND02 YFYWEP02 YFYARSi YFYBFTi YFYBOPi YFYCBKi YFYDRGi YFYFRDi YFYHBKi YFYHITi anyerr anymiss YFYJRDi YFYPETi YFYRABi YFYROBi YFYRSTi YFYRST2i YFYSHPi YFYSKVi YFYVNDi YFYWEPi YFYARSerr YFYBFTerr YFYBOPerr YFYCBKerr YFYDRGerr YFYFRDerr YFYHBKerr YFYHITerr YFYJRDerr YFYPETerr YFYRABerr YFYROBerr YFYRSTerr YFYRSTerr YFYSHPerr YFYSKVerr YFYVNDerr YFYWEPerr; if anyerr=1; run; /*------------------- check summaries----------------------*/ data new ;set ex6.ex6; keep caseid mdprev1-mdprev6 mdvol1-mdvol6 mdvar1-mdvar6 GENDER SECTOR SZINDEP; array vars dprev1-dprev6 dvol1-dvol6 dvar1-dvar6; array miss mdprev1-mdprev6 mdvol1-mdvol6 mdvar1-mdvar6; do over vars; IF VARS=. THEN MISS=1; ELSE MISS=0; END; RUN; DATA CHECK; SET EX6.FROMDETAIL; KEEP CASEID dprev1-dprev6 dvol1-dvol6 dvar1-dvar6; RUN; PROC SORT DATA=NEW; BY CASEID; RUN; PROC SORT DATA=CHECK; BY CASEID; RUN; data check2; merge check new; by caseid; RUN; proc means data=check2; VAR dprev6; CLASS SZINDEP MDPREV6; run; proc means data=check2; VAR dprev6; CLASS SZINDEP dprev5; run; proc means data=EX6.EX6; VAR dp:; run; proc means data=EX6.EX6; VAR dprev6; CLASS SZINDEP ; run; data check; set ex6.ex6; array vars dprev1-dprev6; array miss miss1-miss6; do over vars; if vars=. then miss=1; else miss=0; end; run; proc means data=check;* no interaction here; var dprev5 dvol5 dvar5; class szindep miss6; where gender=1; run; proc means data=check;* or here; var miss6; class sector dprev5; where gender=2; run; /*------------------- check detailed files--------------------------*/ data check3 ; set ex6.ex6det; keep caseid YFYARS02 YFYBFT02 YFYBOP02 YFYCBK02 YFYDRG02 YFYFRD02 YFYHBK02 YFYHIT02 YFYJRD02 YFYPET02 YFYRAB02 YFYROB02 YFYRST02 YFYRST22 YFYSHP02 YFYSKV02 YFYVND02 YFYWEP02; run; proc sort data=check3; by caseid; run; proc sort data=check; by caseid; run; data new; set ex6.detailimpmi; array vars YFYARS02 YFYBFT02 YFYBOP02 YFYCBK02 YFYDRG02 YFYFRD02 YFYHBK02 YFYHIT02 YFYJRD02 YFYPET02 YFYRAB02 YFYROB02 YFYRST02 YFYRST22 YFYSHP02 YFYSKV02 YFYVND02 YFYWEP02; array impv YFYARSi YFYBFTi YFYBOPi YFYCBKi YFYDRGi YFYFRDi YFYHBKi YFYHITi YFYJRDi YFYPETi YFYRABi YFYROBi YFYRSTi YFYRST2i YFYSHPi YFYSKVi YFYVNDi YFYWEPi; do over vars; impv=vars;end; keep YFYARSi YFYBFTi YFYBOPi YFYCBKi YFYDRGi YFYFRDi YFYHBKi YFYHITi YFYJRDi YFYPETi YFYRABi YFYROBi YFYRSTi YFYRST2i YFYSHPi YFYSKVi YFYVNDi YFYWEPi caseid _mult_; run; proc sort data=new; by caseid; run; data check2; merge check new check3; by caseid; array vars YFYARS02 YFYBFT02 YFYBOP02 YFYCBK02 YFYDRG02 YFYFRD02 YFYHBK02 YFYHIT02 YFYJRD02 YFYPET02 YFYRAB02 YFYROB02 YFYRST02 YFYRST22 YFYSHP02 YFYSKV02 YFYVND02 YFYWEP02; array impv YFYARSi YFYBFTi YFYBOPi YFYCBKi YFYDRGi YFYFRDi YFYHBKi YFYHITi YFYJRDi YFYPETi YFYRABi YFYROBi YFYRSTi YFYRST2i YFYSHPi YFYSKVi YFYVNDi YFYWEPi; array err YFYARSerr YFYBFTerr YFYBOPerr YFYCBKerr YFYDRGerr YFYFRDerr YFYHBKerr YFYHITerr YFYJRDerr YFYPETerr YFYRABerr YFYROBerr YFYRSTerr YFYRSTerr YFYSHPerr YFYSKVerr YFYVNDerr YFYWEPerr; anymiss=0; do i=1 to 18; if vars[i]=. then anymiss=1; end; if anymiss=0 then do i=1 to 18; err[i]=0; if abs(vars[i]-impv[i])>0.001 then do; put caseid i; anyerr=1; err[i]=1;end; end; keep caseid miss6 YFYARS02 YFYBFT02 YFYBOP02 YFYCBK02 YFYDRG02 YFYFRD02 YFYHBK02 YFYHIT02 YFYJRD02 YFYPET02 YFYRAB02 YFYROB02 YFYRST02 YFYRST22 YFYSHP02 YFYSKV02 YFYVND02 YFYWEP02 YFYARSi YFYBFTi YFYBOPi YFYCBKi YFYDRGi YFYFRDi YFYHBKi YFYHITi anyerr anymiss YFYJRDi YFYPETi YFYRABi YFYROBi YFYRSTi YFYRST2i YFYSHPi YFYSKVi YFYVNDi YFYWEPi YFYARSerr YFYBFTerr YFYBOPerr YFYCBKerr YFYDRGerr YFYFRDerr YFYHBKerr YFYHITerr YFYJRDerr YFYPETerr YFYRABerr YFYROBerr YFYRSTerr YFYRSTerr YFYSHPerr YFYSKVerr YFYVNDerr YFYWEPerr; if anyerr=1; run; /*------------------- check summaries----------------------*/ data new ;set ex6.ex6; keep caseid SZINDEP SECTOR GENDER mdprev1-mdprev6 mdvol1-mdvol6 mdvar1-mdvar6 dprev1-dprev6 dvol1-dvol6 dvar1-dvar6; array vars dprev1-dprev6 dvol1-dvol6 dvar1-dvar6; array miss mdprev1-mdprev6 mdvol1-mdvol6 mdvar1-mdvar6; do over vars; IF VARS=. THEN MISS=1; ELSE MISS=0; END; RUN; DATA CHECK; SET EX6.FROMDETAIL; array vars dprev1-dprev6 dvol1-dvol6 dvar1-dvar6; array varsI Idprev1-Idprev6 Idvol1-Idvol6 Idvar1-Idvar6; DO OVER VARS; VARSI=VARS; END; KEEP CASEID Idprev1-Idprev6 Idvol1-Idvol6 Idvar1-Idvar6 ; RUN; PROC SORT DATA=NEW; BY CASEID; RUN; PROC SORT DATA=CHECK; BY CASEID; RUN; data check2; merge check new; by caseid; array vars dprev1-dprev6 dvol1-dvol6 dvar1-dvar6; array varsI Idprev1-Idprev6 Idvol1-Idvol6 Idvar1-Idvar6; array miss mdprev1-mdprev6 mdvol1-mdvol6 mdvar1-mdvar6; ANYMISS=0; DO OVER MISS; IF MISS THEN ANYMISS=1; END; ERROR=0; IF ANYMISS=0 THEN DO OVER VARS; IF VARSI^=VARS THEN ERROR=1; END; IF ERROR=1; RUN; DATA CHECKS6 ; SET CHECK2; KEEP CASEID DPREV6 DVOL6 DVAR6 IDPREV6 IDVOL6 IDVAR6 MDPREV6 MDVOL6 MDVAR6 SZINDEP; RUN; proc means data=check2; VAR DPREV6; CLASS SZINDEP MDVOL6; run;