Hi:
Do you have
ODS ESCAPECHAR='~';
in your code -- before the proc report step where you use ~n??? The other thing is that sometimes, you may need to use ~1n instead of ~n.
When I run this sample code, I get the expected results. If you are trying to open your LISTING window output in Word, then you will see/should see the ~n. Also, make sure that your PROC REPORT split character is NOT set to ~. You don't actually have to use ODS ESCAPECHAR to get each character in a header on a separate line...you could do it with just the SPLIT character, as shown in report #2.
cynthia
[pre]
ods listing close;
ods rtf file='c:\temp\vert_hdr.rtf';
ods escapechar='~';
proc report data=sashelp.class nowd split='#';
title '1) With Escapechar';
column name age height;
define name / order 'N~nA~nM~nE';
define age / display 'A~nG~nE';
define height/ display 'H~nE~nI~nG~nH~nT';
run;
proc report data=sashelp.class nowd split='#';
title '2) With Split Only';
column name age height;
define name / order 'N#A#M#E';
define age / display 'A#G#E';
define height/ display 'H#E#I#G#H#T';
run;
ods rtf close;
[/pre]