Hi:
This really isn't a rotated header, so much as a "put every character in the header on a separate line" solution. Basically, you put a "line feed" between every character in the spanning header. Proc Report will do a spanning header for you. See #1 report. Then, using ODS ESCAPECHAR, you can put a line feed between every letter in the header. See #2 report. The "line feed" is the ODS ESCAPECHAR + n...so if ESCAPECHAR is ^, then ^n is the line feed.
Tech Support may have some other ideas. This is sort of the "brute force" method.
cynthia
[pre]
ods pdf file='fake_vertical1.pdf';
ods escapechar='^';
proc report data=sashelp.class nowd;
title '1) Make Spanning Header -- not vertical';
column ('SPAN - HDR' name age height weight sex) x y z;
define name / order 'Name';
define age / order 'Age';
define height / sum;
define weight / sum;
define sex / display;
define x / computed 'X';
define y /computed 'Y';
define z / computed 'Z';
compute x;
x = age * 100 + height.sum;
endcomp;
compute y;
y = age * 25 + weight.sum;
endcomp;
compute z;
z = age * 73 + height.sum + weight.sum;
endcomp;
run;
ods pdf close;
ods pdf file='fake_vertical2.pdf';
ods escapechar='^';
proc report data=sashelp.class nowd;
title '2) Use line feed between each character';
column ('S^nP^nA^nN^n-^nH^nD^nR' name age height weight sex) x y z;
define name / order 'Name';
define age / order 'Age';
define height / sum;
define weight / sum;
define sex / display;
define x / computed 'X';
define y /computed 'Y';
define z / computed 'Z';
compute x;
x = age * 100 + height.sum;
endcomp;
compute y;
y = age * 25 + weight.sum;
endcomp;
compute z;
z = age * 73 + height.sum + weight.sum;
endcomp;
run;
ods pdf close;
[/pre]