goptions vsize=7.5in htext=1.8; title 'Logistic Regression: Proportional Odds Model'; %include catdata(arthrit); proc logistic data=arthrit descending; class sex (ref=last) treat (ref=first) / param=ref; model improve = sex treat age ; output out=results p=prob l=lower u=upper xbeta=logit stdxbeta=selogit / alpha=.33; proc print data=results(obs=6); id id treat sex; var improve _level_ prob lower upper logit; format prob lower upper logit selogit 6.3; run; *-- combine treatment and _level_, set bar color; data results; set results; treatl = trim(treat)||put(_level_,1.0); if treat='Placebo' then col='BLACK'; else col='RED'; proc sort data=results; by sex treatl age; *-- Error bars, on prob scale; %bars(data=results, var=prob, class=age, cvar=treatl, by=age, lower=lower, upper=upper, color=col, out=bars); proc sort data=bars; by sex treatl age; *-- Custom legends, for treat-level and sex; %label(data=results, y=prob, x=age, xoff=1, cvar=treatl, by=sex, subset=last.treatl, out=label1, pos=6, text=treatl); %label(data=results, y=0.9, x=20, size=2, by=sex, subset=first.sex, out=label2, pos=6, text=sex); *-- Combine the annotate data sets; data bars; set label1 label2 bars; by sex; goptions hby=0; proc gplot data=results; plot prob * age = treatl / vaxis=axis1 haxis=axis2 hminor=1 vminor=1 nolegend anno=bars name='glogist2a'; by sex; axis1 label=(a=90 'Prob. Improvement (67% CI)') order=(0 to 1 by .2); axis2 order=(20 to 80 by 10) offset=(2,5); symbol1 v=circle i=join l=3 c=black; symbol2 v=circle i=join l=3 c=black; symbol3 v=dot i=join l=1 c=red; symbol4 v=dot i=join l=1 c=red; run;