It looks like you need to place the open code after the macro definitions and after executing the try macro. Otherwise the proc genmod is looking for the out_data and it doesn't exist until the MI macro is executed. data eq1; input ID y x z w; cards; 1 1 23 0 19 2 0 32 1 . 3 1 67 . . 3 1 . 1 3 ; run; %macro mi(in_data); proc mi data = &in_data out=out_data nimpute=&n_imp seed= &&my_seed&i; CLASS y; FCS REG (x w) LOGISTIC (y ); VAR y x z w; run; %mend mi; %macro try(in_data,n_imp,in_seed,n_boot); data seed_long(drop=i); call streaminit(&in_seed); do i = 1 to &n_boot; x_seed = floor(rand("Uniform")*500000); output; end; run; data _null_; set seed_long; call symput('my_seed'|| compress(put(_n_,8.)), x_seed); run; %let i=1; %do %until (&i>&n_boot) ; %mi(&in_data) %let i = %eval(&i+1); %end; %mend try; %try(eq1,5,123,3) proc genmod data = out_data ; class ID; model y = x z w/dist=bin; repeated subject=ID/type=ind; by _imputation_; ods output ParameterEstimates=mvn; run; quit; proc mianalyze parms=mvn; modeleffects x; ods output ParameterEstimates=sim_y; run; %put _global_;
... View more