<?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: Calculating a tricky average using by group processing in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Calculating-a-tricky-average-using-by-group-processing/m-p/407314#M99240</link>
    <description>&lt;P&gt;It should be 79.2?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
proc sql;
create table want as
select *, mean(score) as avg_score
from test
group by schoolid, studentid;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Wed, 25 Oct 2017 14:54:30 GMT</pubDate>
    <dc:creator>Reeza</dc:creator>
    <dc:date>2017-10-25T14:54:30Z</dc:date>
    <item>
      <title>Calculating a tricky average using by group processing</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculating-a-tricky-average-using-by-group-processing/m-p/407306#M99236</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have some data in which students are tracked between schools and years--observations with the same student&amp;nbsp;ID and same school ID are assumed to be the same person (i.e. person A in school 65 in year 2007 = person A in school 65 in year 2008). But person A in school 65 is not the same as person A in school 64, regardless of year. I need to calculate the average score over years. Some students appear in multiple years, and some only appear in one (in which case their average score would just be their score from last year). Additionally, students can appear&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Here is what my data currently looks like:&lt;/P&gt;&lt;P&gt;data test;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp;infile datalines;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp;input studentID $ schoolID year score;&lt;/P&gt;&lt;P&gt;datalines;&lt;/P&gt;&lt;P&gt;a 123 2000 78&lt;/P&gt;&lt;P&gt;a 123 2000 78&lt;/P&gt;&lt;P&gt;a 123 2001 80&lt;/P&gt;&lt;P&gt;a 123 2001 80&lt;/P&gt;&lt;P&gt;a 123 2001 80&lt;/P&gt;&lt;P&gt;b 123 2002 95&lt;/P&gt;&lt;P&gt;b 456 2003 91&lt;/P&gt;&lt;P&gt;c 456 2003 90&lt;/P&gt;&lt;P&gt;c 456 2004 98&lt;/P&gt;&lt;P&gt;c 456 2006 92&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Basically i want another column with average score, that should be 79, 79, 79, 79, 79, 95, 91, 93.3, 93.3, 93.3&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I feel like I might need a combination of sql and by group processing but I'm getting stuck on calculating the average score vertically.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks!&lt;/P&gt;</description>
      <pubDate>Wed, 25 Oct 2017 14:42:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculating-a-tricky-average-using-by-group-processing/m-p/407306#M99236</guid>
      <dc:creator>lnicholl9</dc:creator>
      <dc:date>2017-10-25T14:42:48Z</dc:date>
    </item>
    <item>
      <title>Re: Calculating a tricky average using by group processing</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculating-a-tricky-average-using-by-group-processing/m-p/407312#M99239</link>
      <description>&lt;P&gt;Sort by studentID and schoolID, then use BY-group processing to compute the means for each student-school pair. Lastly, merge the results:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
proc sort data=test;
by studentID schoolID;;
run;

proc means data=test noprint;
by studentID schoolID;
var score;
output out=means(drop=_type_ _freq_) mean=mean;
run;

data All;
merge test means;
by studentID schoolID;
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 25 Oct 2017 14:52:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculating-a-tricky-average-using-by-group-processing/m-p/407312#M99239</guid>
      <dc:creator>Rick_SAS</dc:creator>
      <dc:date>2017-10-25T14:52:54Z</dc:date>
    </item>
    <item>
      <title>Re: Calculating a tricky average using by group processing</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculating-a-tricky-average-using-by-group-processing/m-p/407314#M99240</link>
      <description>&lt;P&gt;It should be 79.2?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
proc sql;
create table want as
select *, mean(score) as avg_score
from test
group by schoolid, studentid;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 25 Oct 2017 14:54:30 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculating-a-tricky-average-using-by-group-processing/m-p/407314#M99240</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2017-10-25T14:54:30Z</dc:date>
    </item>
    <item>
      <title>Re: Calculating a tricky average using by group processing</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculating-a-tricky-average-using-by-group-processing/m-p/407316#M99241</link>
      <description>&lt;P&gt;Thanks for the quick responses! I should have been more clear about how volume is calculated&lt;/P&gt;&lt;P&gt;Take this example:&lt;/P&gt;&lt;P&gt;studentID schoolID year score&lt;/P&gt;&lt;P&gt;a &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;123 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2000 &amp;nbsp; 78&lt;/P&gt;&lt;P&gt;a &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 123 &amp;nbsp; &amp;nbsp; &amp;nbsp; 2001 &amp;nbsp; 80&lt;/P&gt;&lt;P&gt;a &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 123 &amp;nbsp; &amp;nbsp; &amp;nbsp; 2001 &amp;nbsp; &amp;nbsp;80&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The average score should be 79.0, not 79.3. This is because the second two observations are essentially duplicates. There are other covariates which are different but these 4 columns are the same. So the mean should not be calculated like these 3 are independent. It should be calculated as sum(of unique scores)/number of unique years.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks!&lt;/P&gt;</description>
      <pubDate>Wed, 25 Oct 2017 15:00:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculating-a-tricky-average-using-by-group-processing/m-p/407316#M99241</guid>
      <dc:creator>lnicholl9</dc:creator>
      <dc:date>2017-10-25T15:00:03Z</dc:date>
    </item>
    <item>
      <title>Re: Calculating a tricky average using by group processing</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculating-a-tricky-average-using-by-group-processing/m-p/407317#M99242</link>
      <description>&lt;P&gt;And you want to keep the duplicates in your output for some reason?&lt;/P&gt;</description>
      <pubDate>Wed, 25 Oct 2017 15:00:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculating-a-tricky-average-using-by-group-processing/m-p/407317#M99242</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2017-10-25T15:00:54Z</dc:date>
    </item>
    <item>
      <title>Re: Calculating a tricky average using by group processing</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculating-a-tricky-average-using-by-group-processing/m-p/407318#M99243</link>
      <description>&lt;P&gt;Here's one way - first identify the duplicates and then average. If all you're doing is an average, it may be worth just adding that to the data step as well.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data test1;
set test;
by studentID schoolID year;
if first.year then duplicate=0;
else duplicate=1;
run;

proc sql;
create table want as
select *, mean(case when duplicate=0 then score else . end) as avg_score
from test1
group by schoolid, studentid;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 25 Oct 2017 15:05:02 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculating-a-tricky-average-using-by-group-processing/m-p/407318#M99243</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2017-10-25T15:05:02Z</dc:date>
    </item>
    <item>
      <title>Re: Calculating a tricky average using by group processing</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculating-a-tricky-average-using-by-group-processing/m-p/407396#M99266</link>
      <description>&lt;P&gt;Try this:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql;
create table test_avg as
select 
    studentID, 
    schoolID, 
    year,
    sum(score/n)/sum(1/n) as avg_score
from (
    select 
        *, 
        count(score) as n
    from test
    group by studentID, schoolID, year )
group by studentID, schoolID;
select * from test_avg;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 25 Oct 2017 18:03:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculating-a-tricky-average-using-by-group-processing/m-p/407396#M99266</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2017-10-25T18:03:19Z</dc:date>
    </item>
    <item>
      <title>Re: Calculating a tricky average using by group processing</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculating-a-tricky-average-using-by-group-processing/m-p/407406#M99274</link>
      <description>&lt;P&gt;This worked perfectly, thanks!!&lt;/P&gt;</description>
      <pubDate>Wed, 25 Oct 2017 18:14:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculating-a-tricky-average-using-by-group-processing/m-p/407406#M99274</guid>
      <dc:creator>lnicholl9</dc:creator>
      <dc:date>2017-10-25T18:14:54Z</dc:date>
    </item>
    <item>
      <title>Re: Calculating a tricky average using by group processing</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculating-a-tricky-average-using-by-group-processing/m-p/407638#M99350</link>
      <description>&lt;PRE&gt;

data test;
   infile datalines;
   input studentID $ schoolID year score;
datalines;
a 123 2000 78
a 123 2000 78
a 123 2001 80
a 123 2001 80
a 123 2001 80
b 123 2002 95
b 456 2003 91
c 456 2003 90
c 456 2004 98
c 456 2006 92
;
run;

proc sql;
select *,(select mean(distinct score) from test 
 where studentID=a.studentID and schoolID=a.schoolID) as mean
 from test as a;
quit;
&lt;/PRE&gt;</description>
      <pubDate>Thu, 26 Oct 2017 13:29:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculating-a-tricky-average-using-by-group-processing/m-p/407638#M99350</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2017-10-26T13:29:35Z</dc:date>
    </item>
  </channel>
</rss>

