<?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: Calculate moving average by group in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Calculate-moving-average-by-group/m-p/296309#M62034</link>
    <description>&lt;P&gt;Hi Ksharp,&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Yes I do have a large table. It's a 3*117k table orignally. I tried Reeza's array but didn't work. Any suggestions? Thanks.&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Sat, 03 Sep 2016 15:58:20 GMT</pubDate>
    <dc:creator>angel302</dc:creator>
    <dc:date>2016-09-03T15:58:20Z</dc:date>
    <item>
      <title>Calculate moving average by group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculate-moving-average-by-group/m-p/296267#M62009</link>
      <description>&lt;P&gt;I was trying to calculate 12 month moving average for each individual clients. I have the following simplified data in a table named individual_moving_avg with various users, dates and their incident count:&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;SAP&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;OpenDate&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Count&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;100004&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Aug-13&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;30&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;100004&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Sep-13&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;49&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;100004&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Oct-13&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;42&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;100004&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Nov-13&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;44&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;100004&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Dec-13&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;37&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;…&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;…&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;…&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;100005&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Aug-13&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;28&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;100005&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Sep-13&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;17&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;100005&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Oct-13&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;29&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;100005&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Nov-13&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;15&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;100005&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Dec-13&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;13&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;…&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;…&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;…&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;100007&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Aug-13&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;9&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;100007&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Sep-13&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;12&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;100007&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Oct-13&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;14&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;100007&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Nov-13&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;16&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;100007&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Dec-13&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;23&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;…&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;…&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;…&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;100011&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Aug-13&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;100011&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Sep-13&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;100011&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Oct-13&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;100011&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Nov-13&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;0&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;100011&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Dec-13&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;…&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;…&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;…&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;100012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Aug-13&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;0&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;100012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Sep-13&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;100012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Oct-13&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;100012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Nov-13&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;100012&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Dec-13&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;3&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;...&lt;/P&gt;&lt;P&gt;Below is my code:&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;DATA&lt;/STRONG&gt; Individual_moving_avg;&lt;/P&gt;&lt;P&gt;&amp;nbsp; SET All_new;&lt;/P&gt;&lt;P&gt;&amp;nbsp; BY SAP OpenDate;&lt;/P&gt;&lt;P&gt;&amp;nbsp; length SAP_Recs &lt;STRONG&gt;3&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Average &lt;STRONG&gt;8&lt;/STRONG&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; retain SAP_Recs;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If first.SAP=&lt;STRONG&gt;1&lt;/STRONG&gt; then SAP_Recs=&lt;STRONG&gt;0&lt;/STRONG&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SAP_Recs= SAP_Recs+&lt;STRONG&gt;1&lt;/STRONG&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if SAP_Recs&amp;gt;&lt;STRONG&gt;11&lt;/STRONG&gt; then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Average=(lag11(Count)+lag10(Count)+lag9(Count)+lag8(Count)+lag7(Count)+lag6(Count)+lag5(Count)+&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lag4(Count)+lag3(Count)+lag2(Count)+lag(Count)+Count)/&lt;STRONG&gt;12&lt;/STRONG&gt;;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;drop SAP_Recs;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;RUN&lt;/STRONG&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;However, my result does not come out accurately. My correct count of 12 mo moving average does not show until the 23th month. Can anyone possibly help me out on this? Thanks.&lt;/P&gt;</description>
      <pubDate>Sat, 03 Sep 2016 02:02:56 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculate-moving-average-by-group/m-p/296267#M62009</guid>
      <dc:creator>angel302</dc:creator>
      <dc:date>2016-09-03T02:02:56Z</dc:date>
    </item>
    <item>
      <title>Re: Calculate moving average by group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculate-moving-average-by-group/m-p/296272#M62012</link>
      <description>&lt;P&gt;1. If you have SAS/ETS you can use Proc Expand&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sort data=sashelp.stocks out=stocks;
by stock date;
run;

proc expand data=stocks out=stocks2;
id date;
by stock;
convert open=open_avg/ transformout=(movave 12 trimleft 11);
run;

proc print data=stocks2 (obs=20);
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;2. Or you can use an array method with Base SAS&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sort data=sashelp.stocks out=stocks;
	by stock date;
run;

data want;
	set stocks;
	by stock;
	retain pre1-pre12;
	array pre(12);

	if first.stock then
		do;
			call missing(of pre(*));
			count=0;
		end;
	count+1;
	index=mod(count, 12)+1;
	pre(index)=open;

	if count&amp;gt;=12 then
		moving_average=mean(of pre(*));
	drop count index pre1-pre12;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Sat, 03 Sep 2016 02:42:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculate-moving-average-by-group/m-p/296272#M62012</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2016-09-03T02:42:11Z</dc:date>
    </item>
    <item>
      <title>Re: Calculate moving average by group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculate-moving-average-by-group/m-p/296295#M62025</link>
      <description>&lt;PRE&gt;
Do you have a big table ?
If it was ,try Reeza's code .

NOTE: Reeza's code would work only if there are not gap within each ID .

&lt;/PRE&gt;</description>
      <pubDate>Sat, 03 Sep 2016 06:43:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculate-moving-average-by-group/m-p/296295#M62025</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2016-09-03T06:43:14Z</dc:date>
    </item>
    <item>
      <title>Re: Calculate moving average by group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculate-moving-average-by-group/m-p/296308#M62033</link>
      <description>&lt;P&gt;Thank you for the code, Reez. Unfortunately I don thave SAS/ETS and can only use data step. I tried your array metho but it still didn't give me the right result. It that becuase there are gaps between my each ID?&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 03 Sep 2016 15:55:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculate-moving-average-by-group/m-p/296308#M62033</guid>
      <dc:creator>angel302</dc:creator>
      <dc:date>2016-09-03T15:55:40Z</dc:date>
    </item>
    <item>
      <title>Re: Calculate moving average by group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculate-moving-average-by-group/m-p/296309#M62034</link>
      <description>&lt;P&gt;Hi Ksharp,&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Yes I do have a large table. It's a 3*117k table orignally. I tried Reeza's array but didn't work. Any suggestions? Thanks.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 03 Sep 2016 15:58:20 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculate-moving-average-by-group/m-p/296309#M62034</guid>
      <dc:creator>angel302</dc:creator>
      <dc:date>2016-09-03T15:58:20Z</dc:date>
    </item>
    <item>
      <title>Re: Calculate moving average by group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculate-moving-average-by-group/m-p/296314#M62036</link>
      <description>&lt;P&gt;Less than a million isn't a big table. The array method should work fine, please post your non working code.&lt;/P&gt;</description>
      <pubDate>Sat, 03 Sep 2016 19:11:36 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculate-moving-average-by-group/m-p/296314#M62036</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2016-09-03T19:11:36Z</dc:date>
    </item>
    <item>
      <title>Re: Calculate moving average by group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculate-moving-average-by-group/m-p/296324#M62042</link>
      <description>&lt;P&gt;Hi Reeza,&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;My three vairalbes are:&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;P&gt;SAP&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;OpenDate&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;Count&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I'm counting the 12-moving average for count by SAP ID. Below is my array code:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;data Individual_moving_avg;&lt;BR /&gt;set All_new2;&lt;BR /&gt;by SAP;&lt;BR /&gt;retain pre1-pre12;&lt;BR /&gt;array pre(12);&lt;/P&gt;&lt;P&gt;if first.SAP then&lt;BR /&gt;do;&lt;BR /&gt;call missing(of pre(*));&lt;BR /&gt;count=0;&lt;BR /&gt;end;&lt;BR /&gt;count+1;&lt;BR /&gt;index=mod(count, 12)+1;&lt;BR /&gt;pre(index)=OpenDate;&lt;/P&gt;&lt;P&gt;if count&amp;gt;=12 then&lt;BR /&gt;moving_average=mean(of pre(*));&lt;BR /&gt;drop count index pre1-pre12;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks!&lt;/P&gt;</description>
      <pubDate>Sat, 03 Sep 2016 21:06:55 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculate-moving-average-by-group/m-p/296324#M62042</guid>
      <dc:creator>angel302</dc:creator>
      <dc:date>2016-09-03T21:06:55Z</dc:date>
    </item>
    <item>
      <title>Re: Calculate moving average by group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculate-moving-average-by-group/m-p/296325#M62043</link>
      <description>&lt;P&gt;In addition, there are gaps between my SAP ID. They are not countining number.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 03 Sep 2016 21:11:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculate-moving-average-by-group/m-p/296325#M62043</guid>
      <dc:creator>angel302</dc:creator>
      <dc:date>2016-09-03T21:11:18Z</dc:date>
    </item>
    <item>
      <title>Re: Calculate moving average by group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculate-moving-average-by-group/m-p/296335#M62046</link>
      <description>&lt;P&gt;Unless you want the average of your dates this line is your biggest issue:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;pre(index)=OpenDate;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Assign the value you want to average.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;pre(index)=Count;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Because you're looking at month,&amp;nbsp;you could put the month in. You'd have to test it though, not sure how it work with missing months.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;pre(month(openDate))=Count;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Otherwise look at proc timeseries or a similar proc to add in your missing data points if you need to average over 12 months with missing dates. You need to decide how to account for it as well, if missing is it an average over 11 months or less, basically available data? Or do you need to modify it in some manner.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 03 Sep 2016 22:53:52 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculate-moving-average-by-group/m-p/296335#M62046</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2016-09-03T22:53:52Z</dc:date>
    </item>
    <item>
      <title>Re: Calculate moving average by group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculate-moving-average-by-group/m-p/296336#M62047</link>
      <description>&lt;P&gt;I'm not sure what you mean by gaps in SAP ID. Each ID is its own, it doesn't matter. The months/dates need to be continuous.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If you're missing months is where you'll run into issues.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 03 Sep 2016 22:54:52 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculate-moving-average-by-group/m-p/296336#M62047</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2016-09-03T22:54:52Z</dc:date>
    </item>
    <item>
      <title>Re: Calculate moving average by group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculate-moving-average-by-group/m-p/296348#M62057</link>
      <description>&lt;PRE&gt;
Reeza, Yes. I mean gap is missing month .


If you have big table try Hash Table:



data have;
do sap=1 to 100;
 do year=1990 to 2016;
  do month=1 to 12;
   opendate=mdy(month,1,year);
   count=ceil(100*ranuni(1234));
   output;
  end;
 end;
end;
format opendate monyy7.;
drop year month;
run;


data want;
 if _n_=1 then do;
  if 0 then set have(rename=(count=_count));
  declare hash h(dataset:'have(rename=(count=_count))',hashexp:20);
  h.definekey('sap','opendate');
  h.definedata('_count');
  h.definedone();
 end;
set have;
sum=0;n=0;
do i=intnx('month',opendate,-11) to opendate ;
  if h.find(key:sap,key:i)=0 then do;
   sum+_count; n+1;
  end;
end;
mean=sum/n;
drop i sum n _count;
run;


&lt;/PRE&gt;</description>
      <pubDate>Sun, 04 Sep 2016 02:57:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculate-moving-average-by-group/m-p/296348#M62057</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2016-09-04T02:57:39Z</dc:date>
    </item>
    <item>
      <title>Re: Calculate moving average by group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculate-moving-average-by-group/m-p/298519#M62797</link>
      <description>&lt;P&gt;Hi Reeza,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I want to calcultae moving avg for last 30 days from the current day,&lt;/P&gt;
&lt;P&gt;how i can implement your given code.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thanks for the help in advance.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Regards,&lt;/P&gt;
&lt;P&gt;Kaushal&lt;/P&gt;</description>
      <pubDate>Thu, 15 Sep 2016 06:23:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculate-moving-average-by-group/m-p/298519#M62797</guid>
      <dc:creator>kaushalsolanki</dc:creator>
      <dc:date>2016-09-15T06:23:22Z</dc:date>
    </item>
    <item>
      <title>Re: Calculate moving average by group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculate-moving-average-by-group/m-p/298562#M62809</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/11847"&gt;@kaushalsolanki﻿&lt;/a&gt;&amp;nbsp;please start a new thread with your question, and include sample data.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 15 Sep 2016 09:01:06 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculate-moving-average-by-group/m-p/298562#M62809</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2016-09-15T09:01:06Z</dc:date>
    </item>
    <item>
      <title>Re: Calculate moving average by group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculate-moving-average-by-group/m-p/579593#M164518</link>
      <description>&lt;P&gt;Thanks for this Reeza, I made this work for what I need.&lt;/P&gt;&lt;P&gt;Used your code with the array method to calculate running daily average.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I had table SUM_PER_DAY_ initially, and need to get the daily average computed from the start of the month.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="sum_per_day_.JPG" style="width: 200px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/31569iA0C05CEAA6400855/image-dimensions/200x164?v=v2" width="200" height="164" role="button" title="sum_per_day_.JPG" alt="sum_per_day_.JPG" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This is my code modified from yours:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data _null_;
set sum_per_day_;
call symput('max_day',strip(max(day(final_date))));
run;
%put &amp;amp;=max_day;

data want_sum_per_day_;
	set sum_per_day_;
	retain pre1-pre&amp;amp;max_day.;
	array pre(&amp;amp;max_day.);

	if first.final_date then
		do;
			call missing(of pre(*));
			count=0;
		end;
	count+1;
	index=mod(count, &amp;amp;max_day.)+1;
	pre(index)=subtotal;
	moving_average=mean(of pre(*))/1000000;
	drop count index pre1-pre&amp;amp;max_day.;
run;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;Output is as below, with moving average by the millions.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="avg_per_day_.JPG" style="width: 200px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/31570i62366AEFDE584F0E/image-size/small?v=v2&amp;amp;px=200" role="button" title="avg_per_day_.JPG" alt="avg_per_day_.JPG" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 07 Aug 2019 07:51:31 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculate-moving-average-by-group/m-p/579593#M164518</guid>
      <dc:creator>sustagens</dc:creator>
      <dc:date>2019-08-07T07:51:31Z</dc:date>
    </item>
  </channel>
</rss>

