Revision: 17157
                            
                                                            
                                    
                                        
Initial Code
                                    
                                    
                                                            
                                    
                                        
Initial URL
                                    
                                    
                                                            
                                    
                                        
Initial Description
                                    
                                    
                                                            
                                    
                                        
Initial Title
                                    
                                    
                                                            
                                    
                                        
Initial Tags
                                    
                                    
                                
                                                            
                                    
                                        
Initial Language
                                    
                                    
                                                    
                        at August 25, 2009 13:19 by webonomic
                            
                            Initial Code
/* Given the following Data: */
data test;
input var1 var2 var3;
datalines;
. 2 .
. 2 1
0 2 1
0 2 1
1 2 1
1 2 1
1 3 1
3 3 5
3 3 5
3 3 5
3 4 5
3 4 5
5 4 5
;
run;
/* Solution #1: Proc Tabulate */
data dummy;
input var1 var2 var3;
cards;
0 0 0
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
;
run;
proc format;
	value var_fmt
		0="N/A"
		1="Very Poor"
		2="Poor"
		3="Average"
		4="Good"
		5="Very Good"
		;
run;
quit;
data joined;
      set test(in=is_valid) dummy;
      if is_valid then valid=1;
run; 
%macro doit;
%DO I=1 %TO 3;
proc tabulate data=joined format=8.;
    class var&I;
    var valid;
    tables var&I, valid=' '*n=' ' 			
		/ rts=22 misstext='0';
    title 'Title Here';
    format var&I var_fmt.;
    label var&I="Var&I Label Here";
run; 
%END;
%mend;
%doit;
/* Solution #2: Proc Summary + Proc Freq Combo */
proc format;
	value var_fmt
		.="Missing"
		0="N/A"
		1="Very Poor"
		2="Poor"
		3="Average"
		4="Good"
		5="Very Good"
		;
run;
quit;
proc summary nway completetypes missing;
   class var1--var3 / preloadfmt;
   format var1--var3 var_fmt.;
   output out=count(drop=_type_);
run;
proc freq data=count;
   tables var1--var3 / list nocum;
   format var1--var3 var_fmt.;
   weight _freq_ / zeros;
run;
                                Initial URL
http://jaredprins.squarespace.com/blog/2009/8/25/show-all-possible-values-in-table-regardless-of-whether-or-n.html
Initial Description
Here are two solutions when creating a table to show responses to a questionnaire where respondents rate items in various categories. In this case, the responses range from 0 to 5 (N/A, Very Poor, Poor, Average, Good, Very Good).
Initial Title
Show all possible values in table regardless of whether or not the value exists
Initial Tags
Initial Language
SAS