Here's the part of the code transposed that you originally posted. I'll leave the rest up to you.
data data1;
set &data (keep=&yvar &mvar &avar &cvar &cens);
run;
%if &interaction=true %then %do;
data data1;
set data1;
int=&avar*&mvar;
run;
%end;
%if (&cvar^= & &casecontrol=false) | (&cvar^= &
&casecontrol=) %then %do;
%LET cvars= &cvar;
%LET i =1;
%DO %UNTIL(NOT %LENGTH(%SCAN(&cvars,&i))) ;
proc means noprint data=data1;
var %SCAN(&cvars,&i);
output out=data2&i mean=/autoname;
run;
data data2new&i;
set data2&i;
rename %SCAN(&cvars,&i)_mean = mean;
drop _TYPE_ _FREQ_;
run;
proc append base=data3 data=data2new&i;
run;
proc sql;
%LET i=%EVAL(&i+1);
%END;
proc transpose data=data3 out=data2(drop = _name_);
run;
Honestly, that entire process could be removed from the macro loop and done in a single proc means.
The single proc means below replaces most of the code you originally posted.
%let cvars = weight height;
%let n_vars = %sysfunc(countw(&cvars));
%put &cvars.;
%put &n_vars.;
proc means data=sashelp.class noprint;
var &cvars;
output out=data2 (drop= _type_ _freq_) mean=col1-col&n_vars.;
run;
Good Luck!
... View more