goptions htext=4 pct ftext=swiss rotate=landscape;
/* Read in raw data and assign values to the SHAPE */
/* variable. Include dummy observations for 1990 */
/* to push the bars to the center of the TYPE axis. */
data revenue;
input year dollars type;
if type=1 or type=2 then shape='prism';
else shape='point';
cards;
1986 100 1
1986 150 2
1987 200 1
1987 250 2
1988 300 1
1988 350 2
1989 325 1
1989 375 2
1990 350 1
1990 400 2
1990 0 0
1990 0 3
;
/* Create the TYPEFMT. format to assign labels to */
/* TYPE values and blank out tick labels for */
/* dummy points. */
proc format;
value typefmt
1='Projected'
2='Actual'
0,3=' ';
run;
/* Use the PROC G3D SCATTER statement to produce */
/* the graph. */
proc g3d data=revenue;
scatter type*year=dollars /
xticknum=5 /* number of ticks on YEAR axis */
yticknum=4 /* number of ticks on TYPE axis */
zticknum=5 /* number of ticks on */
/* DOLLARS axis */
zmin=0 /* minimum DOLLARS axis value */
zmax=400 /* maximum DOLLARS axis value */
rotate=60 /* rotation around DOLLARS axis */
size=3 /* width of blocks */
grid /* reference lines on all axes */
shape=shape; /* SHAPE variable dictates */
/* the shape */
/* Assign formats to tickmark labels. */
format type typefmt. dollars dollar5.;
/* Use LABEL statements to suppress axis labels. */
label type='00'x year='00'x dollars='00'x;
title1 height=8 pct font=swissb 'YEARLY REVENUES';
title2 height=5 pct font=swissb '(In millions of dollars');
run;