%MACRO Table2(datain=, varin=, class1=, varfu=, varn=, tableout=); *******************************************************; *** Summarize variable at baseline **; *******************************************************; PROC SUMMARY NOPRINT DATA=&datain; VAR &varin ; CLASS &class1; OUTPUT OUT=x2; **************************************; *** Get means for each group *; **************************************; PROC TRANSPOSE DATA=x2 OUT=x3 (RENAME=( col1=v_n col4=v_m col5=v_sd col6=v1_n col9=v1_m col10=v1_sd col11=v2_n col14=v2_m col15=v2_sd) KEEP= col1 col4 col5 col6 col9 col10 col11 col14 col15); VAR &varin ; ********************************************; *** Test equal age by intervention at baseline; **********************************************; PROC TTEST DATA=&datain; CLASS &class1; VAR &varin; ODS OUTPUT TTESTS=e1 (RENAME=(probt=v_p) KEEP=probt method ); DATA e2 (DROP=method); SET e1; IF method="Pooled"; *******************************************************; *** Summarize variable at Follow-up **; *******************************************************; PROC SUMMARY NOPRINT DATA=&datain; VAR &varfu ; CLASS &class1; OUTPUT OUT=f2; **************************************; *** Get means for each group *; **************************************; PROC TRANSPOSE DATA=f2 OUT=f3 (RENAME=( col6=f1_n col9=f1_m col10=f1_sd col11=f2_n col14=f2_m col15=f2_sd) KEEP= col6 col9 col10 col11 col14 col15); VAR &varfu ; ********************************************; *** Test equal age by intervention at baseline; **********************************************; PROC TTEST DATA=&datain ; CLASS &class1; VAR &varfu; ODS OUTPUT TTESTS=fe1 (RENAME=(probt=f_p) KEEP=probt method ); DATA fe2 (DROP=method); SET fe1; IF method="Pooled"; *****************************************; *** Combine data prior to printing table ; *****************************************; DATA x4; MERGE x3 e2 f3 fe2; RUN; DATA _NULL_; SET x4; FILE &tableout MOD; *** deal with some special case which places variable name in two lines; *** take apart string if there is space between string; space=verify("&varn", ' '); *if return 1 then there is space, 0, otherwise.; if space eq 1 then do; varn1=scan("&varn", 1,' '); varn2=scan("&varn", 2,' '); end; IF space = 1 then PUT @1 varn1 @11 "Mean" @19 v_m 4.1 @30 v1_m 4.1 @42 v2_m 4.1 @52 v_p 5.4 @65 f1_m 4.1 @76 f2_m 4.1 @87 f_p 5.4 / @1 varn2 @10"(Std)" @18 "(" v_sd 4.2 ")" @29 "(" v1_sd 4.2 ")" @41 "(" v2_sd 4.2 ")" @64 "(" f1_sd 4.2 ")" @75 "(" f2_sd 4.2 ")" / @10" n " @19 v_n 3.0 @30 v1_n 3.0 @42 v2_n 3.0 @65 f1_n 3.0 @76 f2_n 3.0 / "_________________________________________________________________________________________________"/; else PUT @1 "&varn" @11 "Mean" @19 v_m 4.1 @30 v1_m 4.1 @42 v2_m 4.1 @52 v_p 5.4 @65 f1_m 4.1 @76 f2_m 4.1 @87 f_p 5.4 / @10"(Std)" @18 "(" v_sd 4.2 ")" @29 "(" v1_sd 4.2 ")" @41 "(" v2_sd 4.2 ")" @64 "(" f1_sd 4.2 ")" @75 "(" f2_sd 4.2 ")" / @10" n " @19 v_n 3.0 @30 v1_n 3.0 @42 v2_n 3.0 @65 f1_n 3.0 @76 f2_n 3.0 / "_________________________________________________________________________________________________"/; RUN; %MEND;