Hi:
I'm not exactly sure what is wanted. Here's some code that stacks name and age from SASHELP.CLASS in one cell, using PROC REPORT: [pre]
ods listing close;
ods pdf file='stack_col.pdf';
ods escapechar='~';
proc report data=newclass nowd;
column name age newvar height;
define name /order noprint;
define age /display noprint;
define newvar / computed;
define height /display
style(column)={vjust=b};
compute newvar;
newvar = name||"~n"||put(age,3.0);
endcomp;
run;
ods pdf close;[/pre]
Note how the concatenated variable is built inside the PROC REPORT syntax with a COMPUTE block. You could have done this concatenation in a data step before the PROC REPORT step -- but the COMPUTE block works very nicely. The only thing you have to be careful about is that the variables that you will concatenate together must appear in the COLUMN statement before the computed variable. In order for this to work, you also must use ODS ESCAPECHAR (in this case, a tilde (~) so that you can put a "line break" in between the two variables.
What is at the bottom of your note is HTML, which is why I'm confused about what it is you want. When you say that you want to use PROC TEMPLATE instead of the DATA _NULL_ , I'm not sure if you want PROC TEMPLATE for a table template associated with a procedure (like PROC MEANS). A style template won't do what you want and a tagset template might allow you to stack variables in a cell or change HTML or other MARKUP, but PDF is not a markup destination.
Yes, it is possible to stack columns inside a TABLE template associated with a procedure. In that instance, you would change the TABLE template, put the TABLE template in an item store like SASUSER.TEMPLAT. Then the next time you use the procedure, if your ODS PATH is pointing to the item store, the procedure would use the changed TABLE template.
It seems to me that PROC REPORT will do what you want.
cynthia