Hi:
Have you tried the LIST option with PROC FREQ?????
[pre]
ods output list=work.freqlist;
proc freq data=sashelp.shoes;
tables region*product product*subsidiary/list;
run;
proc print data=work.freqlist;
run;
[/pre]
The output from this job is too lengthy to show here, but you get a flat list for the first table region*product and then another flat list for product*subsidiary. The information for each crossing is differentiated by a TABLE variable that shows which table statement created the observation. In addition, you can sometimes get the kind of summarizing you want from PROC MEANS. I'm not sure you need TABULATE...although, TABULATE will allow you to nest or cross character variables but you are limited to the N or PCTN statistic.
[pre]
proc tabulate data=sashelp.shoes;
class region product subsidiary;
table region*product,n;
run;
[/pre]
cynthia