/**********************************************************************/
/* Set GOPTIONS for viewing or printing your chart */
goptions reset=all device=xcolor target=ps300 rotate=landscape;
/* Read in data and make preliminary calculations */
data staff;
input year usa gbr japan austr;
total=sum(usa,gbr,japan,austr);
usapct=(usa/total)*100;
japanpct=(japan/total)*100;
gbrpct=(gbr/total)*100;
austrpct=(austr/total)*100;
cards;
1990 60 15 35 35
1991 70 25 40 66
1992 128 52 65 89
1993 101 53 60 75
run;
/**********************************************************************/
proc summary data=staff max;
var total;
output out=totals max=maxtot n=years;
run;
/* Specify titles and footnote */
title1 f=swiss h=3.5 'PMG Inc.';
title2 f=swiss h=2 'Worldwide Personnel';
footnote1 f=swiss j=r h=1.5 'SAS/GRAPH' move=(+0,+.5) '02'x
move=(+0,-.5) ' Software';
/* Begin null DATA step to produce graph using DSGI */
data _null_;
set staff end=eof;
retain ymin vscale hoffset xmax xmin width;
/**********************************************************************/
if _n_=1 then do;
set totals;
rc=ginit(); /* initialize DSGI */
rc=graph('clear'); /* open GRSEG entry in WORK.GSEG catalog */
/**********************************************************************/
call gask('window',0,llx,lly,urx,ury,rc);
/* Horizontal dimensions */
xrange=urx-llx; /* width of graph area */
xmin=.15*xrange; /* minimum x coordinate for graph */
xmax=.95*xrange; /* maximum x coordinate for graph */
width=(xmax-xmin)/years; /* units available for each figure */
/* horizontal offset of each figure from origin of graph area */
hoffset=((xmax-xmin)/2)-(((years-1)*width)/2);
/* Vertical dimensions */
yrange=ury-lly; /* height of graph area */
ylegend=.1*yrange; /* space reserved for legend */
ymin=.2*yrange; /* minimum y coordinate for graph */
ymax=.95*yrange; /* maximum y coordinate for graph */
/* vertical scaling factor for figure */
/* height to reflect data value */
vscale=(ymax-ymin)/maxtot;
/* Associate colors with color index values */
rc=gset('colrep',1,'black');
rc=gset('colrep',2,'gray22');
rc=gset('colrep',3,'gray66');
rc=gset('colrep',4,'gray88');
rc=gset('colrep',5,'grayaa');
rc=gset('colrep',6,'grayee');
/**********************************************************************/
rc=gset('asf','texcolor','bundled');
rc=gset('asf','texfont','bundled');
rc=gset('texrep',1,1,'swiss');
rc=gset('texrep',2,6,'marker');
rc=gset('texrep',3,1,'markere');
/**********************************************************************/
rc=gset('asf','filcolor','bundled');
rc=gset('asf','filtype','bundled');
rc=gset('filrep',1,2,'solid',1);
rc=gset('filrep',2,3,'solid',1);
rc=gset('filrep',3,4,'solid',1);
rc=gset('filrep',4,5,'solid',1);
rc=gset('filrep',5,1,'hollow',1);
/**********************************************************************/
/* scaled maximum data value used for drawing and labeling axis */
maxht=maxtot*vscale;
/* draw axis line */
rc=gdraw('line',6,xmin-10,xmin,xmin-5,xmin-5,xmin-10,xmin,
ymin,ymin,ymin,ymin+maxht,ymin+maxht,ymin+maxht);
/* angle for text string */
rc=gset('texup',-1,0);
/* horizontal and vertical alignment of text */
rc=gset('texalign','center','normal');
rc=gset('texindex',1); /* text bundle index */
rc=gset('texheight',4); /* height of text string */
/* place axis label */
rc=gdraw('text',xmin-10,(ymin+maxht/2),'Total Number of Employees');
/**********************************************************************/
rc=gset('texup',0,1);
rc=gset('texheight',4);
rc=gdraw('text',xmin-5,ymin-5,'YEAR:');
/* Define array of location names */
loc1='U.S.A. (HQ)';
loc2='Great Britain';
loc3='Japan';
loc4='Australia';
array loc{*} loc1-loc4;
k=dim(loc);
/**********************************************************************/
do j=1 to k;
if mod(k,2)=0 then num=k;
else num=k+1;
totrows=2; /* two rows of legend entries */
totcols=num/totrows; /* calculate number of columns */
/* needed */
xspace=(xrange-xmin)/2; /* reference point to calculate */
/* entry position */
/* Determine row and column location for entry */
if j le totcols then do;
row=1; col=j;
end;
else do;
row=2; col=j-totcols;
end;
/* Calculate x and y position and draw legend bar and text. */
/* Calculate horizontal position for legend entry */
xleg=xmin+(col*(xspace/totcols));
/* calculate vertical position for legend entry */
yleg=ylegend-(row*(ylegend/totrows-1));
/* select fill bundle index */
rc=gset('filindex',j);
/* draw legend bar */
rc=gdraw('bar',xleg,yleg,xleg+5,yleg+3);
rc=gset('texalign','left','base');
rc=gset('texheight',3);
/* draw legend value next to bar */
rc=gdraw('text',xleg+7,yleg,loc{j});
end;
/* Draw legend label */
rc=gset('texalign','center','base');
rc=gset('texindex',1);
rc=gset('texheight',4);
rc=gdraw('text',xmin+((xspace/totcols)/2),ylegend/2,'Locations:');
end; /* end of initialization */
/**********************************************************************/
height=total*vscale; /* scaled height of figure */
x=(_n_-1)*width+(xmin+hoffset); /* horizontal position of figure */
/**********************************************************************/
rc=gset('texalign','center','normal');
rc=gset('texheight',5);
rc=gdraw('text',x,ymin-5,trim(left(put(year,4.))));
/**********************************************************************/
/* specify direction of the text string */
rc=gset('texpath','up');
rc=gset('texheight',height);
rc=gset('texalign','center','base');
rc=gset('texindex',2);
/* horizontal scaling factor to place figures next to */
/* one another */
xscale=5*(total/maxtot);
rc=gdraw('text',x-xscale,ymin,'Q'); /* draw male figure */
rc=gset('texindex',3);
rc=gdraw('text',x-xscale,ymin,'Q'); /* outline male figure */
rc=gset('texindex',2);
rc=gdraw('text',x+xscale,ymin,'R'); /* draw female figure */
rc=gset('texindex',3);
rc=gdraw('text',x+xscale,ymin,'R'); /* outline female figure */
rc=gset('texpath','right');
rc=gset('texheight',4);
rc=gset('texindex',1);
/* place data value above figure */
rc=gdraw('text',x,ymin+height,trim(left(put(total,comma7.))));
/**********************************************************************/
/* pie radius scaled to maximum of 12 units */
pscale=12*(total/maxtot);
/* Define array for drawing pie charts */
array pct{*} usapct japanpct gbrpct austrpct;
do i=1 to dim(pct);
retain start end;
/* calculate starting and ending angles for pie slice. */
if i=1 then start=0;
else start=start+(pct{i-1}*3.6);
end=start+(pct{i}*3.6);
rc=gset('filindex',i);
/* draw pie slice */
rc=gdraw('pie',x,ymin+height/2,pscale,start,end);
rc=gset('filindex',5);
/* outline pie slice */
rc=gdraw('pie',x,ymin+height/2,pscale,start,end);
end;
/**********************************************************************/
if eof then do;
rc=graph('update'); /* complete the graph and display */
rc=gterm(); /* terminate DSGI */
end;
run;
/**********************************************************************/