***** Dummy data ********; data ars; do subject=1 to 100; aval=-100 + floor((1+100-(-100))* rand("Uniform")); respn=mod(subject, 4)+1; if respn=1 then resp='PD'; else if respn=2 then resp='SD'; else if respn=3 then resp='PR'; else if respn=4 then resp='CR'; output; end; run; proc freq data = ars noprint; tables respn*resp / out=respcnt list missing; run; proc transpose data=respcnt out =t_respcnt(drop=_name_) prefix=_; id respn; var resp; run; data _null_; set t_respcnt; length all_ $100.; array a[*] _:; all_=catx(' ', of a[*]); call symput('justify', strip(all_)); run; proc sql noprint; select distinct resp into :allresp separated by ' ' from ars; quit; %let pdval=solid; %let sdval=X1; %let prval=L1; %let crval=empty; %let val1=pdval; %let val2=sdval; %let val3=prval; %let val4=crval; data c2; do i=1 to countw("&allresp"); resp=scan("&allresp", i); put i= resp=; call symput('val'||strip(put(i, best.)), strip(compress(resp, "'"))||'val'); end; run; pattern1 value=&&&val1. color=black; pattern2 value=&&&val2. color=black; pattern3 value=&&&val3. color=black; pattern4 value=&&&val4. color=black; axis1 label = (h=3.2 a=90 "% Change from Screening") order = (-100 to 100 by 10) offset=(2, 2) minor = none; axis2 label = none value = none; axis3 label = none; legend1 label = none value = (h=2.5 justify = left &justify. 'CR') cborder = white; proc sort data=ars; by descending aval; run; data ars2; set ars; by descending aval; ord=_n_; label resp='Response'; run; proc gchart data = ars2; vbar ord / frame sumvar = aval type = mean legend=legend1 subgroup = resp discrete raxis = axis1 maxis = axis2 gaxis = axis3 ref =20,-30 LREF=(3 3) nostats ; run; quit;