<?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 SQL - Block CASE statement instead of repeating across lines in SAS Procedures</title>
    <link>https://communities.sas.com/t5/SAS-Procedures/PROC-SQL-Block-CASE-statement-instead-of-repeating-across-lines/m-p/236125#M55196</link>
    <description>&lt;P&gt;You can achieve your final goal by putting both summarisations (whole and top 3) side by side&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql;
select * from
(select 
    mean(score_game1) as mean_score1,
    mean(score_game2) as mean_score2,
    mean(score_game3) as mean_score3 
 from players) ,
(select 
    mean(score_game1) as mean_top_score1,
    mean(score_game2) as mean_top_score2,
    mean(score_game3) as mean_top_score3 
 from players where player_rank &amp;lt;= 3);
quit;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Tue, 24 Nov 2015 03:27:10 GMT</pubDate>
    <dc:creator>PGStats</dc:creator>
    <dc:date>2015-11-24T03:27:10Z</dc:date>
    <item>
      <title>PROC SQL - Block CASE statement instead of repeating across lines</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/PROC-SQL-Block-CASE-statement-instead-of-repeating-across-lines/m-p/236089#M55192</link>
      <description>&lt;P&gt;I have a game score dataset that looks like the below. I am trying to calculate new three columns that conditions on Rank using something like:&lt;/P&gt;
&lt;P&gt;Dataset:&lt;/P&gt;
&lt;PRE class="lang-sql prettyprint prettyprinted"&gt;&lt;CODE&gt;&lt;SPAN class="pln"&gt;Player  Player_Rank Score_Game1 Score_Game2 Score_Game3
Tom     &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;87&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;84&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;92&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;
John    &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;91&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;84&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;87&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;
Peter   &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;81&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;83&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;83&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;
Hank    &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;4&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;85&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;72&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;57&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;
Alfred  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;5&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;60&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;58&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;54&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;
Mike    &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;6&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;79&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;74&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;64&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;
Joe     &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;7&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;49&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;81&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;62&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;
Marc    &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;8&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;70&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;87&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;47&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;
Sean    &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;9&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;73&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;51&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;69&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;New Column calculations PROC SQL code:&lt;/P&gt;
&lt;PRE class="lang-sql prettyprint prettyprinted"&gt;&lt;CODE&gt;&lt;SPAN class="kwd"&gt;case&lt;/SPAN&gt; &lt;SPAN class="kwd"&gt;when&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Player_Rank &lt;/SPAN&gt;&lt;SPAN class="pun"&gt;&amp;lt;=&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt; &lt;SPAN class="kwd"&gt;then&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Score_Game1 &lt;/SPAN&gt;&lt;SPAN class="kwd"&gt;else&lt;/SPAN&gt; &lt;SPAN class="pun"&gt;.&lt;/SPAN&gt; &lt;SPAN class="kwd"&gt;end&lt;/SPAN&gt; &lt;SPAN class="kwd"&gt;as&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Score_Game1_r&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="kwd"&gt;case&lt;/SPAN&gt; &lt;SPAN class="kwd"&gt;when&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Player_Rank &lt;/SPAN&gt;&lt;SPAN class="pun"&gt;&amp;lt;=&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt; &lt;SPAN class="kwd"&gt;then&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Score_Game2 &lt;/SPAN&gt;&lt;SPAN class="kwd"&gt;else&lt;/SPAN&gt; &lt;SPAN class="pun"&gt;.&lt;/SPAN&gt; &lt;SPAN class="kwd"&gt;end&lt;/SPAN&gt; &lt;SPAN class="kwd"&gt;as&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Score_Game2_r&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;;&lt;/SPAN&gt;
&lt;SPAN class="kwd"&gt;case&lt;/SPAN&gt; &lt;SPAN class="kwd"&gt;when&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Player_Rank &lt;/SPAN&gt;&lt;SPAN class="pun"&gt;&amp;lt;=&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt; &lt;SPAN class="kwd"&gt;then&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Score_Game3 &lt;/SPAN&gt;&lt;SPAN class="kwd"&gt;else&lt;/SPAN&gt; &lt;SPAN class="pun"&gt;.&lt;/SPAN&gt; &lt;SPAN class="kwd"&gt;end&lt;/SPAN&gt; &lt;SPAN class="kwd"&gt;as&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Score_Game3_r&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Is there a way that I just do one case statement, something like the below instead of repeating it for all columns?&lt;/P&gt;
&lt;PRE class="lang-sql prettyprint prettyprinted"&gt;&lt;CODE&gt;&lt;SPAN class="kwd"&gt;case&lt;/SPAN&gt; &lt;SPAN class="kwd"&gt;when&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Player_Rank &lt;/SPAN&gt;&lt;SPAN class="pun"&gt;&amp;lt;=&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt; &lt;SPAN class="kwd"&gt;then&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;
    Score_Game1 &lt;/SPAN&gt;&lt;SPAN class="kwd"&gt;else&lt;/SPAN&gt; &lt;SPAN class="pun"&gt;.&lt;/SPAN&gt; &lt;SPAN class="kwd"&gt;end&lt;/SPAN&gt; &lt;SPAN class="kwd"&gt;as&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Score_Game1_r&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;;&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;
    Score_Game2 &lt;/SPAN&gt;&lt;SPAN class="kwd"&gt;else&lt;/SPAN&gt; &lt;SPAN class="pun"&gt;.&lt;/SPAN&gt; &lt;SPAN class="kwd"&gt;end&lt;/SPAN&gt; &lt;SPAN class="kwd"&gt;as&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Score_Game2_r&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;;&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;
    Score_Game3 &lt;/SPAN&gt;&lt;SPAN class="kwd"&gt;else&lt;/SPAN&gt; &lt;SPAN class="pun"&gt;.&lt;/SPAN&gt; &lt;SPAN class="kwd"&gt;end&lt;/SPAN&gt; &lt;SPAN class="kwd"&gt;as&lt;/SPAN&gt;&lt;SPAN class="pln"&gt; Score_Game3_r&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;The end data would look like:&lt;/P&gt;
&lt;PRE class="lang-sql prettyprint prettyprinted"&gt;&lt;CODE&gt;&lt;SPAN class="pln"&gt;Player  Player_Rank Score_Game1 Score_Game2 Score_Game3 Score_Game1_r   Score_Game2_r   Score_Game3_r
Tom     &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;87&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;84&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;92&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;87&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;84&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;92&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;
John    &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;91&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;84&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;87&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;91&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;84&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;87&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;
Peter   &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;81&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;83&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;83&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;81&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;83&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;83&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;
Hank    &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;4&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;85&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;72&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;57&lt;/SPAN&gt;  &lt;SPAN class="pun"&gt;.&lt;/SPAN&gt;   &lt;SPAN class="pun"&gt;.&lt;/SPAN&gt;   &lt;SPAN class="pun"&gt;.&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;
Alfred  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;5&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;60&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;58&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;54&lt;/SPAN&gt;  &lt;SPAN class="pun"&gt;.&lt;/SPAN&gt;   &lt;SPAN class="pun"&gt;.&lt;/SPAN&gt;   &lt;SPAN class="pun"&gt;.&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;
Mike    &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;6&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;79&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;74&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;64&lt;/SPAN&gt;  &lt;SPAN class="pun"&gt;.&lt;/SPAN&gt;   &lt;SPAN class="pun"&gt;.&lt;/SPAN&gt;   &lt;SPAN class="pun"&gt;.&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;
Joe     &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;7&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;49&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;81&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;62&lt;/SPAN&gt;  &lt;SPAN class="pun"&gt;.&lt;/SPAN&gt;   &lt;SPAN class="pun"&gt;.&lt;/SPAN&gt;   &lt;SPAN class="pun"&gt;.&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;
Marc    &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;8&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;70&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;87&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;47&lt;/SPAN&gt;  &lt;SPAN class="pun"&gt;.&lt;/SPAN&gt;   &lt;SPAN class="pun"&gt;.&lt;/SPAN&gt;   &lt;SPAN class="pun"&gt;.&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;
Sean    &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;9&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;73&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;51&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;69&lt;/SPAN&gt;  &lt;SPAN class="pun"&gt;.&lt;/SPAN&gt;   &lt;SPAN class="pun"&gt;.&lt;/SPAN&gt;   &lt;SPAN class="pun"&gt;.&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;The reason I want such is that I want to calculate the AVG(Score) for each game and also the AVG Score for each game just for players in all times top 3. Is there a more efficient way to calculate conditional averages,&amp;nbsp;using proc sql or just&amp;nbsp;data step?&amp;nbsp;Thanks.&lt;/P&gt;</description>
      <pubDate>Mon, 23 Nov 2015 20:40:57 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/PROC-SQL-Block-CASE-statement-instead-of-repeating-across-lines/m-p/236089#M55192</guid>
      <dc:creator>dmz2000</dc:creator>
      <dc:date>2015-11-23T20:40:57Z</dc:date>
    </item>
    <item>
      <title>Re: PROC SQL - Block CASE statement instead of repeating across lines</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/PROC-SQL-Block-CASE-statement-instead-of-repeating-across-lines/m-p/236096#M55193</link>
      <description>&lt;P&gt;To my knowledge it is not possible to create more than one variable with only one CASE WHEN expression.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;But you could accomplish that with a data step:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
set have;
if 1&amp;lt;=Player_Rank&amp;lt;=3 then do;
  Score_Game1_r=Score_Game1;
  Score_Game2_r=Score_Game2;
  Score_Game3_r=Score_Game3;
end;
else call missing(of Score_Game1_r--Score_Game3_r); /* this line can be omitted */
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Maybe you don't need the additional variables, because you can calculate the desired mean scores most easily by using PROC MEANS:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc means data=have;
var score:;
run;

proc means data=have;
where 1&amp;lt;=Player_Rank&amp;lt;=3;
var score:;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;(The abbreviation &lt;FONT face="courier new,courier"&gt;score:&lt;/FONT&gt; assumes that only variables Score_Game1, &lt;SPAN&gt;Score_Game2 and&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;Score_Game3 have names starting with "SCORE".)&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;If, for some reason, you had to use PROC SQL for the calculation, you could compute the averages like this:&lt;/SPAN&gt;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql;
select avg(Score_Game1) as avg1,
       avg(Score_Game2) as avg2,
       avg(Score_Game3) as avg3,
       avg(ifn(1&amp;lt;=Player_Rank&amp;lt;=3,Score_Game1,.)) as avg1top3,
       avg(ifn(1&amp;lt;=Player_Rank&amp;lt;=3,Score_Game2,.)) as avg2top3,
       avg(ifn(1&amp;lt;=Player_Rank&amp;lt;=3,Score_Game3,.)) as avg3top3
from have;
quit;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="font-family: HelevticaNeue-light, 'Helvetica Neue', Helvetica, Arial, sans-serif; line-height: 20px; background-color: #ffffff;"&gt;Edit: Slightly simplified definition of &amp;nbsp;AVGTOP1--&lt;SPAN&gt;AVGTOP3 and changed their names to AVG1TOP3 etc. in order to avoid possible confusion with the "top 3".&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 23 Nov 2015 23:17:00 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/PROC-SQL-Block-CASE-statement-instead-of-repeating-across-lines/m-p/236096#M55193</guid>
      <dc:creator>FreelanceReinh</dc:creator>
      <dc:date>2015-11-23T23:17:00Z</dc:date>
    </item>
    <item>
      <title>Re: PROC SQL - Block CASE statement instead of repeating across lines</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/PROC-SQL-Block-CASE-statement-instead-of-repeating-across-lines/m-p/236125#M55196</link>
      <description>&lt;P&gt;You can achieve your final goal by putting both summarisations (whole and top 3) side by side&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql;
select * from
(select 
    mean(score_game1) as mean_score1,
    mean(score_game2) as mean_score2,
    mean(score_game3) as mean_score3 
 from players) ,
(select 
    mean(score_game1) as mean_top_score1,
    mean(score_game2) as mean_top_score2,
    mean(score_game3) as mean_top_score3 
 from players where player_rank &amp;lt;= 3);
quit;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 24 Nov 2015 03:27:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/PROC-SQL-Block-CASE-statement-instead-of-repeating-across-lines/m-p/236125#M55196</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2015-11-24T03:27:10Z</dc:date>
    </item>
  </channel>
</rss>

