<?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: Multiple by variables in proc means in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Multiple-by-variables-in-proc-means/m-p/298643#M62825</link>
    <description>&lt;P&gt;Please post test data (as a datatstep) an drequired output, it really helps illustrate what you want. &amp;nbsp;I imageine its something along the lines of:&lt;/P&gt;
&lt;P&gt;VAR1 &amp;nbsp; &amp;nbsp;V1RANK &amp;nbsp;VAR2 &amp;nbsp;V2RANK&lt;/P&gt;
&lt;P&gt;ABC &amp;nbsp; &amp;nbsp; &amp;nbsp;1 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DEF &amp;nbsp; &amp;nbsp;1&lt;/P&gt;
&lt;P&gt;ABC &amp;nbsp; &amp;nbsp; &amp;nbsp;1 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RFG &amp;nbsp; &amp;nbsp;2&lt;/P&gt;
&lt;P&gt;GHJ &amp;nbsp; &amp;nbsp; &amp;nbsp;2 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;XYZ &amp;nbsp; &amp;nbsp; 1&lt;/P&gt;
&lt;P&gt;?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If so you can sort the data, and retain a count for each by group - in the above case:&lt;/P&gt;
&lt;PRE&gt;data want;
  set have;
  retain v1rank v2rank;
  by var1 var2;    /* Assumes sorted */
  if first.var1 then v1rank=sum(v1rank,1);
  if first.var2 then v2rank=sum(v2rank,1);
run;&lt;/PRE&gt;</description>
    <pubDate>Thu, 15 Sep 2016 14:05:18 GMT</pubDate>
    <dc:creator>RW9</dc:creator>
    <dc:date>2016-09-15T14:05:18Z</dc:date>
    <item>
      <title>Multiple by variables in proc means</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Multiple-by-variables-in-proc-means/m-p/298636#M62821</link>
      <description>&lt;P&gt;I would like to rank across multiple&amp;nbsp; grouping variables independently and then combine the results. Is there an easy way to do it (outside of using macros) .&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc RANK data = a ; 
by var1;
output out  = t1 mean(ret);
run;

proc RANK data = a ; 
by var2;
output out  = t2 mean(ret);
run;

and then combine t1 and t 2 . ... &lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 15 Sep 2016 13:53:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Multiple-by-variables-in-proc-means/m-p/298636#M62821</guid>
      <dc:creator>mgm</dc:creator>
      <dc:date>2016-09-15T13:53:25Z</dc:date>
    </item>
    <item>
      <title>Re: Multiple by variables in proc means</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Multiple-by-variables-in-proc-means/m-p/298643#M62825</link>
      <description>&lt;P&gt;Please post test data (as a datatstep) an drequired output, it really helps illustrate what you want. &amp;nbsp;I imageine its something along the lines of:&lt;/P&gt;
&lt;P&gt;VAR1 &amp;nbsp; &amp;nbsp;V1RANK &amp;nbsp;VAR2 &amp;nbsp;V2RANK&lt;/P&gt;
&lt;P&gt;ABC &amp;nbsp; &amp;nbsp; &amp;nbsp;1 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;DEF &amp;nbsp; &amp;nbsp;1&lt;/P&gt;
&lt;P&gt;ABC &amp;nbsp; &amp;nbsp; &amp;nbsp;1 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RFG &amp;nbsp; &amp;nbsp;2&lt;/P&gt;
&lt;P&gt;GHJ &amp;nbsp; &amp;nbsp; &amp;nbsp;2 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;XYZ &amp;nbsp; &amp;nbsp; 1&lt;/P&gt;
&lt;P&gt;?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If so you can sort the data, and retain a count for each by group - in the above case:&lt;/P&gt;
&lt;PRE&gt;data want;
  set have;
  retain v1rank v2rank;
  by var1 var2;    /* Assumes sorted */
  if first.var1 then v1rank=sum(v1rank,1);
  if first.var2 then v2rank=sum(v2rank,1);
run;&lt;/PRE&gt;</description>
      <pubDate>Thu, 15 Sep 2016 14:05:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Multiple-by-variables-in-proc-means/m-p/298643#M62825</guid>
      <dc:creator>RW9</dc:creator>
      <dc:date>2016-09-15T14:05:18Z</dc:date>
    </item>
    <item>
      <title>Re: Multiple by variables in proc means</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Multiple-by-variables-in-proc-means/m-p/298654#M62831</link>
      <description>&lt;P&gt;Sorry I botched up my request earlier. &amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Here is the sample data :&amp;nbsp;&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;rownum&lt;/TD&gt;&lt;TD&gt;Rank1&lt;/TD&gt;&lt;TD&gt;Rank 2&lt;/TD&gt;&lt;TD&gt;Var1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;1.2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;1.1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;0.9&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0.766667&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;0.616667&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0.466667&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;0.316667&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;0.166667&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;9&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0.016667&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;-0.13333&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;11&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;-0.28333&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;-0.43333&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;13&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;-0.58333&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;Output :&amp;nbsp;&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Ranks&lt;/TD&gt;&lt;TD&gt;Average of Var1 by RAnk1&lt;/TD&gt;&lt;TD&gt;Average of Var1 by RAnk2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1.15&lt;/TD&gt;&lt;TD&gt;0.417&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;0.46&lt;/TD&gt;&lt;TD&gt;0.129&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;0.09&lt;/TD&gt;&lt;TD&gt;1.2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;0.17&lt;/TD&gt;&lt;TD&gt;0.483&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;-0.06&lt;/TD&gt;&lt;TD&gt;0.061&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;Proc rank should read proc means earlier.&lt;/P&gt;</description>
      <pubDate>Thu, 15 Sep 2016 14:19:51 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Multiple-by-variables-in-proc-means/m-p/298654#M62831</guid>
      <dc:creator>mgm</dc:creator>
      <dc:date>2016-09-15T14:19:51Z</dc:date>
    </item>
    <item>
      <title>Re: Multiple by variables in proc means</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Multiple-by-variables-in-proc-means/m-p/298666#M62837</link>
      <description>&lt;P&gt;hello,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
data have;
infile datalines;
input rownum Rank1 Rank2	Var1;
datalines;
1 1 3 1.2
2 1 4 1.1
3 2 5 0.9
4 3 1 0.766667
5 4 2 0.616667
6 4 1 0.466667
7 4 2 0.316667
8 5 2 0.166667
9 2 1 0.016667
10 4 4 -0.13333
11 5 5 -0.28333
12 4 5 -0.43333
13 3 2 -0.58333
;

proc means data=have ;
class Rank1 Rank2;
Var  Var1;
ways 1;
output out=int(drop=_type_ _freq_) mean()=;
run;

data want;

set int(drop=rank2 rename=(var1=Average_of_Var1_by_RAnk1 rank1=rank) where=(missing(rank)=0) );
set int(drop=rank1 rename=(var1=Average_of_Var1_by_RAnk2 rank2=rank) where=(missing(rank)=0) );

run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 15 Sep 2016 14:43:56 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Multiple-by-variables-in-proc-means/m-p/298666#M62837</guid>
      <dc:creator>Loko</dc:creator>
      <dc:date>2016-09-15T14:43:56Z</dc:date>
    </item>
    <item>
      <title>Re: Multiple by variables in proc means</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Multiple-by-variables-in-proc-means/m-p/298684#M62851</link>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks it seems to work&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;But I was wondering if there is a&amp;nbsp;scalable solution ? I have almost &amp;nbsp;20 Class variables&amp;nbsp;So I would have to repeat this statement 20 times with a drop list that doesn't contain one variable at a time...&amp;nbsp;&lt;/P&gt;&lt;PRE class=" language-sas"&gt;&lt;CODE class="  language-sas"&gt;&lt;SPAN class="token keyword"&gt;set&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;int&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token keyword"&gt;drop&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt;rank2 &lt;SPAN class="token function"&gt;rename&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;var1&lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt;Average_of_Var1_by_RAnk1 rank1&lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt;&lt;SPAN class="token procnames"&gt;rank&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt; &lt;SPAN class="token statement"&gt;where&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;missing&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token procnames"&gt;rank&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt;&lt;SPAN class="token number"&gt;0&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt; &lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 15 Sep 2016 15:22:06 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Multiple-by-variables-in-proc-means/m-p/298684#M62851</guid>
      <dc:creator>mgm</dc:creator>
      <dc:date>2016-09-15T15:22:06Z</dc:date>
    </item>
    <item>
      <title>Re: Multiple by variables in proc means</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Multiple-by-variables-in-proc-means/m-p/298737#M62870</link>
      <description>&lt;P&gt;The question may be do you want dataset that feeds into some other analysis or is this a report?&lt;/P&gt;
&lt;P&gt;if a report some thing like this perhaps:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile datalines;
input rownum Rank1 Rank2	Var1;
datalines;
1 1 3 1.2
2 1 4 1.1
3 2 5 0.9
4 3 1 0.766667
5 4 2 0.616667
6 4 1 0.466667
7 4 2 0.316667
8 5 2 0.166667
9 2 1 0.016667
10 4 4 -0.13333
11 5 5 -0.28333
12 4 5 -0.43333
13 3 2 -0.58333
;
run;

data trans (keep=Var1 RankVar RankVal);
   set have;
   array r rank: ;
   do _i_ = 1 to dim(r);
      if not missing (r(_i_)) then do;
         Rankvar = cat('Rank',_i_);
         RankVal = r(_i_);
         output;
      end;
   end;
run;

proc tabulate data=trans;
   class RankVar RankVal;
   var Var1;
   table RankVal='',
         RankVar='Rank Variable'*Var1*mean
         /box='Ranks'
   ;
run;



&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 15 Sep 2016 17:54:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Multiple-by-variables-in-proc-means/m-p/298737#M62870</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2016-09-15T17:54:10Z</dc:date>
    </item>
    <item>
      <title>Re: Multiple by variables in proc means</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Multiple-by-variables-in-proc-means/m-p/298845#M62903</link>
      <description>&lt;PRE&gt;
I think you need make a macro like CALL EXECUTE():


data have;
infile datalines;
input rownum Rank1 Rank2	Var1;
datalines;
1 1 3 1.2
2 1 4 1.1
3 2 5 0.9
4 3 1 0.766667
5 4 2 0.616667
6 4 1 0.466667
7 4 2 0.316667
8 5 2 0.166667
9 2 1 0.016667
10 4 4 -0.13333
11 5 5 -0.28333
12 4 5 -0.43333
13 3 2 -0.58333
;
run;
proc sql;
create table temp as
 select rank1 as r,mean(var1) as mean,'rank1' as id length=20
  from have
   group by rank1
union all
 select rank2 as r,mean(var1) as mean,'rank2'
  from have
   group by rank2
order by r;
quit;
proc transpose data=temp out=want;
 by r;
 id id;
 var mean;
run;

&lt;/PRE&gt;</description>
      <pubDate>Fri, 16 Sep 2016 03:00:16 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Multiple-by-variables-in-proc-means/m-p/298845#M62903</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2016-09-16T03:00:16Z</dc:date>
    </item>
  </channel>
</rss>

