/**********************************************************************/
/**********************************************************************/
goptions dev=ps hby=0;
/* Delete entries from the catalog WORK.GSEG. */
proc greplay nofs igout=work.gseg;
delete _all_;
run;
quit;
/* Specify macro variables containing the number of */
/* template panels across and down, and then calculate */
/* the total number of panels. */
%let across=4;
%let down=3;
%let npanels=%eval(&down*&across);
/**********************************************************************/
data garea;
rc=ginit(); /* Initialize DSGI. */
call gask('hsize',hsize,rc); /* Get default HSIZE */
/* for driver. */
hsze=hsize/&across; /* Calculate horizontal */
/* panel size. */
call symput('hsize',left(trim(hsze))); /* Create HSIZE macro */
/* variable. */
call gask('vsize',vsize,rc); /* Get default VSIZE for */
/* driver. */
vsze=vsize/&down; /* Calculate vertical */
/* panel size. */
call symput('vsize',left(trim(vsze))); /* Create VSIZE macro */
/* variable. */
rc=gterm(); /* Terminate DSGI. */
run;
/**********************************************************************/
data one;
do year=1980 to 1991;
do quarter=1 to 4;
sales=10+(10*uniform(5555));
output;
end;
end;
run;
/**********************************************************************/
goptions nodisplay hsize=&hsize vsize=&vsize;
proc gchart data=one;
vbar quarter /discrete sumvar=sales raxis=axis1;
by year;
pattern1 v=solid c=black;
title "#byval(year)";
axis1 order=(0 to 20 by 5) label=('SALES') minor=none;
run;
quit;
/**********************************************************************/
data numgraf;
rc=gset('catalog','work','gseg'); /* Open WORK.GSEG catalog. */
rc=ginit();
call gask('numgraph',grsegcnt,rc); /* Get # of graphs in */
/* catalog. */
if grsegcnt<&npanels then num=grsegcnt; /* If more graphs than */
else num=&npanels; /* panels, replay only as */
/* many graphs as there */
/* are panels. */
call symput('numgrph',left(trim(num))); /* # of graphs to replay. */
ymult=100/&down; /* Y increment for panels. */
xmult=100/&across; /* X increment for panels. */
rc=gterm(); /* Terminate DSGI. */
run;
/**********************************************************************/
data coord;
set numgraf;
do x=0 to (100-xmult) by xmult; /* Calculate X coordinate */
/* values. */
llx=x; /* Lower-left X. */
ulx=x; /* Upper-left X. */
urx=x+xmult; /* Upper-right X. */
lrx=x+xmult; /* Lower-right X. */
do y=0 to (100-ymult) by ymult; /* Calculate Y coordinate */
/* values. */
lly=y; /* Lower-left Y. */
uly=y+ymult; /* Upper-left Y. */
ury=y+ymult; /* Upper-right Y. */
lry=y; /* Lower-right Y. */
output;
end;
end;
run;
proc sort data=coord;
by descending y;
run;
/**********************************************************************/
data mccoord;
set coord end=eof;
call symput('llx'||left(_n_),llx);
call symput('ulx'||left(_n_),ulx);
call symput('urx'||left(_n_),urx);
call symput('lrx'||left(_n_),lrx);
call symput('lly'||left(_n_),lly);
call symput('uly'||left(_n_),uly);
call symput('ury'||left(_n_),ury);
call symput('lry'||left(_n_),lry);
if eof then call symput('total',_n_);
run;
/**********************************************************************/
%macro tempdef;
%do i=1 %to &total;
&i / llx=&&llx&i lly=&&lly&i
ulx=&&ulx&i uly=&&uly&i
urx=&&urx&i ury=&&ury&i
lrx=&&lrx&i lry=&&lry&i
%end;
%mend tempdef;
/**********************************************************************/
%macro tplay;
%do i=1 %to &numgrph;
&i:&i
%end;
%mend tplay;
/**********************************************************************/
goptions reset=goptions target=ps;
/**********************************************************************/
proc greplay nofs igout=work.gseg tc=work.templt;
tdef spec&npanels
%tempdef; /* Invoke macro TEMPDEF to create template. */
template spec&npanels;
treplay
%tplay; /* Invoke macro TPLAY to replay graphs. */
run;
quit;
/**********************************************************************/
/**********************************************************************/