这个简单,我做一个类似的吧
data or;
input param $10. or min max p;
cards;
sex 0.81 1.23 0.53 0.33
age 0.70 1.53 0.52 0.06
bmi 0.85 1.39 0.64 0.29
eduacation 0.89 1.10 0.70 0.76
;
run;
data tot;
set or;
CI=put(min,7.2)||' to '||put(max,7.2. -l);
ord=_n_;
retain constant 1;
run;
ods path work.templ(update) sashelp.tmplmst(read) sashelp.styles(read);
proc template;
define style mystyle;
parent = Styles.default;
style parskip / fontsize = 0pt;
class text / 'continued' = " ";
class Continued /
frame=void
pretext = _undef_
borderspacing = 0
padding = 0 ;
class GraphBackground/
backgroundcolor = white
color = white;
class LayoutContainer /
padding = 0
borderspacing = 0
borderwidth = 0
frame = void
rules = none
backgroundcolor = _undef_;
style GraphFonts from GraphFonts/
'GraphDataFont'=('Times New Roman' ,12pt)
'GraphUnicodeFont'=('Times New Roman' ,12pt)
'GraphValueFont'=('Times New Roman' ,12pt)
'GraphLabelFont'=('Times New Roman' ,12pt)
'GraphFootnoteFont'=('Times New Roman' ,12pt) /*Times New Roman*/
'GraphTitleFont'=('Times New Roman' ,12pt)
'GraphAnnoFont'=('Times New Roman' ,12pt);
class graph/
fontweight=bold;
end;
run;
proc template;
define statgraph ForestPlot;
begingraph / designwidth=9in designheight=16in;
layout lattice / columns=3 columngutter=0 columnweights=(0.10 .60 .30 );
layout overlay / walldisplay=none border=false
yaxisopts=(reverse=true type=discrete display=none)
xaxisopts=(display=none offsetmin=0.25 offsetmax=0.25);
entry halign=left " Parameter" / location=outside valign=top ;
scatterplot y=ord x=eval(constant*1) / markercharacter=param;
endlayout;
layout overlay /walldisplay=(fill)
yaxisopts=(display=none reverse=true offsetmin=0.00 offsetmax=0.10)
xaxisopts=(type=log offsetmin=0.00 offsetmax=0.00
label="<-----Protect Factor Harm Factor----->"
logopts=(base=10 minorticks=true viewmin=0.01 viewmax=100 ) );
entry halign=center "OR and 95% CIs" / location=outside valign=top ;
scatterplot y=ord x=or / xerrorupper=max xerrorlower=min
markerattrs=graphdata1(symbol=diamondfilled size=1pct);
referenceline x=1 / lineattrs=(pattern=solid);
referenceline x=0.1 / lineattrs=(pattern=shortdash);
referenceline x=10 / lineattrs=(pattern=shortdash);
endlayout;
layout overlay / walldisplay=none border=false
yaxisopts=(reverse=true type=discrete display=none)
xaxisopts=(display=none offsetmin=0.25 offsetmax=0.25);
entry halign=left " OR 95% CI P" / location=outside valign=top ;
scatterplot y=ord x=eval(constant*1) / markercharacter=or;
scatterplot y=ord x=eval(constant*2) / markercharacter=ci;
scatterplot y=ord x=eval(constant*3) / markercharacter=p;
endlayout;
endlayout;
endgraph;
end;
run;
/*ods graphics on / height=5.5 in width=10 in border=off;*/
ods rtf file="d:\test.rtf" style=mystyle;
proc sgrender data=tot template=ForestPlot;
run;
ods rtf close;