******* proc mean macro *****; %macro pm(din=, vars=, grp=, whrstr=, byvars=, dout=); data _temp; set &din; &whrstr; run; %if &byvars ne %then %do; proc sort data=&din out=_temp; by &byvars; &whrstr; run; %end; proc means data=_temp noprint; var &vars; %if &byvars ne %then %do; by &byvars; %end; output out=&dout n=n mean=mean median=median stddev=stddev stderr=stderr min=min max=max q1=q1 q3=q3; run; data &dout; set &dout; grp=&grp; length nstr mnstr sdstr medstr minstr maxstr $20; nstr=strip(put(n, best.)); mnstr=strip(put(mean, 8.1)); sdstr=strip(put(stddev, 8.2)); medstr=strip(put(median, 8.1)); minstr=strip(put(min, best.)); maxstr=strip(put(max, best.)); run; %mend pm; %crt_dynamic_fmt(din=fin, st=avisitn, lbl=avisit, fmtname=visn);