<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Proc Tabulate multiple variables- Missing not counted to percents in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Proc-Tabulate-multiple-variables-Missing-not-counted-to-percents/m-p/273451#M54488</link>
    <description>&lt;P&gt;For this level of unorthodox processing, you have to do it manually.&amp;nbsp; Something like this:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
proc summary data=DEMOS missing chartype;
  class GRP GENDER PAY;
  types GRP * (GENDER PAY) 
        GRP ;
  output out=SUM;
  format GENDER $ge. PAY $pay.  ;
run;

data PCT;
  length PAY GENDER $8;
  retain POP_GRP POP_MISS;
  set SUM(in=A where=(GRP='A')) 
      SUM(in=B where=(GRP='B')) ;
  by GRP _TYPE_;
  if _TYPE_='100'                 then POP_GRP  = _FREQ_;
  if _TYPE_='101' &amp;amp; PAY    eq ' ' then POP_MISS = _FREQ_;
  if _TYPE_='101' &amp;amp; PAY    eq ' ' then POP_PCT  = POP_MISS/POP_GRP;
  if _TYPE_='101' &amp;amp; PAY    ne ' ' then POP_PCT  = _FREQ_/(POP_GRP-POP_MISS);
  if _TYPE_='101' &amp;amp; PAY    eq ' ' then PAY='Unknown';

  if _TYPE_='110' &amp;amp; GENDER eq ' ' then POP_MISS = _FREQ_;
  if _TYPE_='110' &amp;amp; GENDER eq ' ' then POP_PCT  = POP_MISS/POP_GRP;
  if _TYPE_='110' &amp;amp; GENDER ne ' ' then POP_PCT  = _FREQ_/(POP_GRP-POP_MISS);
  if _TYPE_='110' &amp;amp; GENDER eq ' ' then GENDER='Unknown';
  if A then do; POP_A=_FREQ_; PCT_A=POP_PCT; end;
  if B then do; POP_B=_FREQ_; PCT_B=POP_PCT; end;
  drop POP_MISS POP_MISS POP_PCT _FREQ_;
  format _ALL_;
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Fri, 27 May 2016 00:13:25 GMT</pubDate>
    <dc:creator>ChrisNZ</dc:creator>
    <dc:date>2016-05-27T00:13:25Z</dc:date>
    <item>
      <title>Proc Tabulate multiple variables- Missing not counted to percents</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Proc-Tabulate-multiple-variables-Missing-not-counted-to-percents/m-p/273403#M54478</link>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Hi ,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Im piggy-backing on this post:&lt;/P&gt;&lt;P&gt;&lt;A href="https://communities.sas.com/t5/SAS-Procedures/PROC-TABULATE-Missing-as-Percent-of-Non-Missing/m-p/273345" target="_blank"&gt;https://communities.sas.com/t5/SAS-Procedures/PROC-TABULATE-Missing-as-Percent-of-Non-Missing/m-p/273345&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have the same problem but if I multiple variables in the same proc tabulate and they have missing observations for different variables. Ideally I would love to have proc tabulate to tweak the "missing" option. I added a variable pay to the dataset and would like to have the output below.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Any suggestions how to do it in proc tabulate?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Is there a way instead of using proc sql based on the post above?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Or i would need to learn proc report?&lt;/P&gt;&lt;P&gt;Dataset and desired output below&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;proc format;&lt;BR /&gt;value $ge&lt;BR /&gt;'F' = "Female"&lt;BR /&gt;'M' = "Male"&lt;BR /&gt;other = "Unknown";&lt;BR /&gt;value pctfmt&lt;BR /&gt;low -&amp;lt; 1.0 = [percentn7.1]&lt;BR /&gt;1.0 - high = "100.0%";&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;data demos;&lt;BR /&gt;input @1 grp $1.&lt;BR /&gt;@3 gender $1.&lt;BR /&gt;@5 pay $1.&lt;BR /&gt;;&lt;BR /&gt;datalines;&lt;BR /&gt;A F M&lt;BR /&gt;A F D&lt;BR /&gt;A F M&lt;BR /&gt;A F D&lt;BR /&gt;A M&lt;BR /&gt;A M D&lt;BR /&gt;A &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;D&lt;BR /&gt;B F M&lt;BR /&gt;B F D&lt;BR /&gt;B F D&lt;BR /&gt;B M&lt;BR /&gt;B &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;D&lt;BR /&gt;B&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;M&lt;BR /&gt;;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Desired Output(in the same proc tabulate - not necessary to get the Unknown(missing) row):&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;Gender&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;A&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;B&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;Female&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;66.70%&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;75.00%&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;Male&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;33.30%&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;25.00%&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;Unknown&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;14.29%&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;33.33%&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;TOTAL&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;7&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;100.00%&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;6&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;100.00%&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;Pay&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;D&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;4&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;66.67%&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;60.00%&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;M&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;33.33%&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;2&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;40.00%&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;Unknown&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;14.29%&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;16.67%&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;TOTAL&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;7&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;100.00%&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;6&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;100.00%&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 26 May 2016 21:13:06 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Proc-Tabulate-multiple-variables-Missing-not-counted-to-percents/m-p/273403#M54478</guid>
      <dc:creator>nrozario</dc:creator>
      <dc:date>2016-05-26T21:13:06Z</dc:date>
    </item>
    <item>
      <title>Re: Proc Tabulate multiple variables- Missing not counted to percents</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Proc-Tabulate-multiple-variables-Missing-not-counted-to-percents/m-p/273451#M54488</link>
      <description>&lt;P&gt;For this level of unorthodox processing, you have to do it manually.&amp;nbsp; Something like this:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
proc summary data=DEMOS missing chartype;
  class GRP GENDER PAY;
  types GRP * (GENDER PAY) 
        GRP ;
  output out=SUM;
  format GENDER $ge. PAY $pay.  ;
run;

data PCT;
  length PAY GENDER $8;
  retain POP_GRP POP_MISS;
  set SUM(in=A where=(GRP='A')) 
      SUM(in=B where=(GRP='B')) ;
  by GRP _TYPE_;
  if _TYPE_='100'                 then POP_GRP  = _FREQ_;
  if _TYPE_='101' &amp;amp; PAY    eq ' ' then POP_MISS = _FREQ_;
  if _TYPE_='101' &amp;amp; PAY    eq ' ' then POP_PCT  = POP_MISS/POP_GRP;
  if _TYPE_='101' &amp;amp; PAY    ne ' ' then POP_PCT  = _FREQ_/(POP_GRP-POP_MISS);
  if _TYPE_='101' &amp;amp; PAY    eq ' ' then PAY='Unknown';

  if _TYPE_='110' &amp;amp; GENDER eq ' ' then POP_MISS = _FREQ_;
  if _TYPE_='110' &amp;amp; GENDER eq ' ' then POP_PCT  = POP_MISS/POP_GRP;
  if _TYPE_='110' &amp;amp; GENDER ne ' ' then POP_PCT  = _FREQ_/(POP_GRP-POP_MISS);
  if _TYPE_='110' &amp;amp; GENDER eq ' ' then GENDER='Unknown';
  if A then do; POP_A=_FREQ_; PCT_A=POP_PCT; end;
  if B then do; POP_B=_FREQ_; PCT_B=POP_PCT; end;
  drop POP_MISS POP_MISS POP_PCT _FREQ_;
  format _ALL_;
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 27 May 2016 00:13:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Proc-Tabulate-multiple-variables-Missing-not-counted-to-percents/m-p/273451#M54488</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2016-05-27T00:13:25Z</dc:date>
    </item>
    <item>
      <title>Re: Proc Tabulate multiple variables- Missing not counted to percents</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Proc-Tabulate-multiple-variables-Missing-not-counted-to-percents/m-p/273467#M54494</link>
      <description>&lt;P&gt;I am afraid adding one more SQL is best the choice. It looks like PROC TABULATE can not use PCTN&amp;lt;&amp;gt; get the right output.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
data demos;
input @1 grp $1.
@3 gender $1.
@5 pay $1.
;
datalines;
A F M
A F D
A F M
A F D
A M
A M D
A     D
B F M
B F D
B F D
B M
B     D
B     M
;
run;
data temp;
length gender $ 40;
set demos(keep=grp gender) demos(keep=grp pay rename=(pay=gender) in=inb);  
if inb then in='Pay   ';
 else in='Gender';
if not inb then do;
 if gender='F' then gender="Female";
  else  if gender='M' then gender="Male";
    else gender='Unknown';
end;
run;
proc sql;
 create table want as
  select *,1/count(*) as p
   from temp
    group by in,grp;
quit;
proc tabulate data=want format=comma10. missing order=data;
   class in gender grp /preloadfmt ;
   var p;
   table in=''*(gender=' ' all), grp=''*(n='' p=''*sum=''*format=percent8.2) / box='' misstext=' ';
   keylabel all='TOTAL'  ;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 27 May 2016 02:36:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Proc-Tabulate-multiple-variables-Missing-not-counted-to-percents/m-p/273467#M54494</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2016-05-27T02:36:32Z</dc:date>
    </item>
  </channel>
</rss>

