Bruno, Dan, and Reeza, thanks for your responses. I appreciate your suggestions. 1. I'm still not getting exactly what I want, which is (a) two independent vertical axes and (b) multiple panels per page. It seems: a. GTL is probably the way to go to gain maximum flexibility. I need to investigate more (I welcome further suggestions). b. While %sgdesign; is a useful tool to assist building graphs, I do not see multiple y axes as an option. 2. The SGRENDER procedure below generates these two plots (using the same data as last week): a. The PROC SGPLOT TMPLOUT= option generates the PROC TEMPLATE code. The TMPLOUT= option is no longer supported for PROC SGPANEL. b. The PROC SGRENDER code is executed one subject at a time to generate these plots, but this generates one plot per page. c. With a better understanding of the GTL DATAPANEL or DATALATTICE statements, perhaps the PROC TEMPLATE could be modified to avoid this limitation. proc sgplot data=any(where=(subject=1)) NOAUTOLEGEND tmplout="&path.a2.txt";
needle x=sd y=transf / lineattrs=(pattern=solid color=red thickness=4);
yaxis label='units' VALUES = (0 TO 6 BY 1);
band x=sd lower=0 upper=dose / y2axis fillattrs=(color=green transparency=.6);
run;* cancel;
* This is a2.txt which is output from the tmplout option above. *;
proc template;
define statgraph sgplot;
begingraph / collation=binary subpixel=on;
layout overlay / y2axisopts=(labelFitPolicy=Split) yaxisopts=( Label="units" labelFitPolicy=Split type=linear linearopts=( tickvaluelist=( 0 1 2 3 4 5 6 ) viewmin=0 viewmax=6 ) ) y2axisopts=(labelFitPolicy=Split);
NeedlePlot X='sd'n Y='transf'n / primary=true Lineattrs=( Color=CXFF0000 Pattern=1 Thickness=4) LegendLabel="transf" NAME="NEEDLE";
BandPlot X='sd'n LimitUpper='dose'n LimitLower=0 / yaxis=y2 FillAttrs=GraphConfidence(Color=CX008000 Transparency=0.6) LegendLabel="Band" NAME="BAND";
endlayout;
endgraph;
end;
run;
* Create macro variable containing all levels of variable subject. *;
proc sql noprint;
select distinct subject
into :sub separated by ' '
from work.any;
quit;
%*put _all_;
%macro loop;
* Cycle through all subjects. Use loop macro to avoid open code issue. *;
%let i=1;
%let ids=%scan(&sub,&i.,%str( ));
%do %while (%length(&ids.) GT 0);
title "Subject &ids.";
proc sgrender data=work.ANY(where=(subject=&ids.)) template=sgplot;
run;
title;
%let i=%eval(&i.+1);
%let ids=%scan(&sub,&i.,%str( ));
%end;
%mend loop;
%loop;
... View more