You could do something similar to the example below (it assumes the Proc MI step was already run).
/* Getting Started Example Generate Data */
proc format; value ResponseCode 1 = 'Very_Unsatisfied' 2 = 'Unsatisfied' 3 = 'Neutral' 4 = 'Satisfied' 5 = 'Very_Satisfied'; run;
proc format; value UserCode 1 = 'New Customer' 0 = 'Renewal Customer'; run;
proc format; value SchoolCode 1 = 'Middle School' 2 = 'High School'; run;
proc format; value DeptCode 0 = 'Faculty' 1 = 'Admin/Guidance'; run;
data SIS_Survey; format Response ResponseCode.; format NewUser UserCode.; format SchoolType SchoolCode.; format Department DeptCode.; do _imputation_=1 to 2; drop j; retain seed1 111; retain seed2 222; retain seed3 333;
State = 'GA';
NewUser = 1; do School=1 to 71;
call rantbl( seed1, .45, .55, SchoolType );
Department = 0; call rannor( seed3, x ); SamplingWeight = 25 + x * 2; do j=1 to 2; if ( SchoolType = 1 ) then call rantbl( seed2, .16, .21, .30, .24, .09, Response); else call rantbl( seed2, .18, .23, .30, .22, .07, Response); output; end; output;
Department = 1; call rannor( seed3, x ); SamplingWeight = 15 + x * 1.5; do j=1 to 2; if ( SchoolType = 1 ) then call rantbl( seed2, .10, .15, .33, .28, .14, Response ); else call rantbl( seed2, .13, .20, .30, .26, .11, Response); output; end; end;
NewUser = 0; do School=72 to 134;
call rantbl( seed1, .45, .55, SchoolType );
Department = 0; call rannor( seed3, x ); SamplingWeight = 25 + x * 2; do j=1 to 2; if ( SchoolType = 1 ) then call rantbl( seed2, .16, .21, .30, .24, .09, Response); else call rantbl( seed2, .18, .23, .30, .22, .07, Response); output; end; output;
Department = 1; call rannor( seed3, x ); SamplingWeight = 15 + x * 1.5; do j=1 to 2; if ( SchoolType = 1 ) then call rantbl( seed2, .10, .15, .33, .28, .14, Response ); else call rantbl( seed2, .13, .20, .30, .26, .11, Response); output; end; end;
State = 'NC';
NewUser = 1; do School = 135 to 218;
call rantbl( seed1, .45, .55, SchoolType );
Department = 0; call rannor( seed3, x ); SamplingWeight = 25 + x * 2;
if ( SchoolType = 1 ) then call rantbl( seed2, .16, .21, .30, .24, .09, Response); else call rantbl( seed2, .18, .23, .30, .22, .07, Response); output; output; output;
Department = 1; call rannor( seed3, x ); SamplingWeight = 15 + x * 1.5;
if ( SchoolType = 1 ) then call rantbl( seed2, .10, .15, .33, .28, .14, Response ); else call rantbl( seed2, .13, .20, .30, .26, .11, Response); output; output; end;
NewUser = 0; do School = 219 to 274;
call rantbl( seed1, .45, .55, SchoolType );
Department = 0; call rannor( seed3, x ); SamplingWeight = 25 + x * 2; do j=1 to 2; if ( SchoolType = 1 ) then call rantbl( seed2, .16, .21, .30, .24, .09, Response); else call rantbl( seed2, .18, .23, .30, .22, .07, Response); output; end; output;
Department = 1; call rannor( seed3, x ); SamplingWeight = 15 + x * 1.5;
if ( SchoolType = 1 ) then call rantbl( seed2, .10, .15, .33, .28, .14, Response ); else call rantbl( seed2, .13, .20, .30, .26, .11, Response); output; output; end;
State = 'SC';
NewUser = 1; do School = 275 to 328;
call rantbl( seed1, .45, .55, SchoolType );
Department = 0; call rannor( seed3, x ); SamplingWeight = 25 + x * 2; do j=1 to 2; if ( SchoolType = 1 ) then call rantbl( seed2, .16, .21, .30, .24, .09, Response); else call rantbl( seed2, .18, .23, .30, .22, .07, Response); output; end; output;
Department = 1; call rannor( seed3, x ); SamplingWeight = 15 + x * 1.5;
if ( SchoolType = 1 ) then call rantbl( seed2, .10, .15, .33, .28, .14, Response ); else call rantbl( seed2, .13, .20, .30, .26, .11, Response); output; output; end;
NewUser = 0; do School = 329 to 370;
call rantbl( seed1, .45, .55, SchoolType );
Department = 0; call rannor( seed3, x ); SamplingWeight = 25 + x * 2; do j=1 to 2; if ( SchoolType = 1 ) then call rantbl( seed2, .16, .21, .30, .24, .09, Response); else call rantbl( seed2, .18, .23, .30, .22, .07, Response); output; end; output;
Department = 1; call rannor( seed3, x ); SamplingWeight = 15 + x * 1.5;
if ( SchoolType = 1 ) then call rantbl( seed2, .10, .15, .33, .28, .14, Response ); else call rantbl( seed2, .13, .20, .30, .26, .11, Response); output; output; end; end; run; title 'School Information System Survey'; /*Run SURVEYLOGISTIC by _IMPUTATION_*/ proc surveylogistic data=SIS_Survey; by _imputation_; class department; model Response=department/covb; strata State NewUser; cluster School; weight SamplingWeight; store work.test; run;
proc plm restore=work.test; estimate 'dept1' department 1/category=separate; estimate 'dept2' department -1/category=separate; estimate 'dept1 v dept2' department 2/category=separate; ods output Estimates=est_ds; run; proc sort data=est_ds; by response label _imputation_; run;
proc mianalyze data=est_ds; by response label; modeleffects estimate; stderr stderr; run;
... View more