You are on page 1of 2

dm log "clear"; dm output "clear"; options mlogic symbolgen mprint; data sp; input vstest $ lbres 20.

; datalines; Diabp 80 Diabp 43 Diabp 80 sysbp 67.2 sysbp 0 sysbp 56 sysbp 87.64 temp 23.675 temp 565.44554 hr 23.3 hr 56.78 abc 56643.787876 abc 44.7767 ; run; proc sort data=sp; by vstest; data sp; set sp; by vstest; if int(lbres)=lbres then len=0; else len=length(scan(trim(put(lebres,best.)),2,'.')); run; proc sql; create table vs as select distinct vstest from sp; select count (vstest) into :c from vs; select max(len) into :l separated by ' ' from sp group by vstest; quit; proc sort data=sp; by vstest; run; proc means data=sp; by vstest; var lbres; output out=spr n=n mean=mean median=median stderr=sed std=std max=max min=min nm iss=miss; run; data spr; set spr; if vstest='Diabp' then ord=1; else if vstest='sysbp' then ord=2; else if vstest='temp' then ord=3;

else if vstest='abc' then ord=4; else ord=5; run; %macro dec; data sp1; set spr; %do i=1 %to &c; %let x=%scan(&l,&i,' '); if ord=&i then n1=put(n,%eval(&x+8).);label n1='n'; min1=put(round(min,10**-%eval(&x+0)),%eval(&x+8+1).%eval(&x+0));label min1='min' ; max1=put(round(max,10**-%eval(&x+0)),%eval(&x+8+1).%eval(&x+0));label max1='max' ; mean1=put(round(mean,10**-%eval(&x+1)),%eval(&x+8+2).%eval(&x+1));label mean1='m ean'; median1=put(round(median,10**-%eval(&x+1)),%eval(&x+8+2).%eval(&x+1));label medi an1='median'; std1=put(round(std,10**-%eval(&x+2)),%eval(&x+8+3).%eval(&x+2));label std1='std' ; sed1=put(round(sed,10**-%eval(&x+2)),%eval(&x+8+3).%eval(&x+2));label sed1='min' ; %end; output; run; proc transpose data=sp1 out=sp2; by vstest; var n1 min1 max1 mean1 median1 std1 sed1; run; %mend; %dec; proc report data=sp2 nowd; columns vstest _label_ col1; define vstest /'Vstest' width=40 left; define _label_ /'Statistics' width=20 left; define col1 /'Result' width=30 left; run;

You might also like