<?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: recursive mean in SAS Procedures</title>
    <link>https://communities.sas.com/t5/SAS-Procedures/recursive-mean/m-p/612085#M76829</link>
    <description>&lt;P&gt;Had some free time during lunch break for some HASH fun &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input GVKEY	DATADATE : yymmdd10.	TRT1M;*	recursive mean;
format datadate yymmdd10.;
cards;
001081	2004-01-31	-1.8322	 
001081	2004-02-29	4.3713	 
001081	2004-03-31	-11.9811	 
001081	2004-04-30	2.8939	 
001081	2004-05-31	2.2396	 
001081	2004-06-30	-6.5373	 
001081	2004-07-31	-4.6448	 
001081	2004-08-31	-10.4598	 
001081	2004-09-30	2.0539	 
001081	2004-10-31	-8.2390	 
001081	2004-11-30	10.0413	 
001081	2004-12-31	3.2500	 
001081	2005-01-31	-18.2809	-2.01
001081	2005-02-28	-14.8889	-1.55
001081	2005-03-31	-2.0979	-3.61
001096	2004-01-31	-4.0816	 
001096	2004-02-29	4.6809	 
001096	2004-03-31	-2.8862	 
001096	2004-04-30	-3.1579	 
001096	2004-05-31	-1.0870	 
001096	2004-06-30	2.8132	 
001096	2004-07-31	-3.2258	 
001096	2004-08-31	3.3333	 
001096	2004-09-30	4.9032	 
001096	2004-10-31	1.6495	 
001096	2004-11-30	5.4767	 
001096	2004-12-31	0.7308	 
001096	2005-01-31	1.7274	0.77
001096	2005-02-28	2.0755	1.20
;

data want;
if _n_=1 then do;
   dcl hash H () ;
   h.definekey  ("datadate") ;
   h.definedata ("rec_mean") ;
   h.definedone () ;
 end;
 do _n_=1 by 1 until(last.gvkey);
  set have;
  by gvkey;
  array t(0:10) _temporary_;
  t(mod(_n_,11))=TRT1M;
  if n(of t(*))=11 then do;
    rec_mean=mean(of t(*));
    h.add(key:intnx('mon',datadate,2,'e'),data:rec_mean);
  end;
  if h.find() ne 0 then call missing(rec_mean);
  output;
 end;
 h.clear();
 call missing(of t(*));
 format rec_mean 8.2;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Mon, 16 Dec 2019 17:15:38 GMT</pubDate>
    <dc:creator>novinosrin</dc:creator>
    <dc:date>2019-12-16T17:15:38Z</dc:date>
    <item>
      <title>recursive mean</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/recursive-mean/m-p/612033#M76817</link>
      <description>&lt;P&gt;Hi,&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I want to calculate mean from t-2 to t-12 recursively for each compagny (GVKEY)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE width="326"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="64"&gt;GVKEY&lt;/TD&gt;
&lt;TD width="81"&gt;DATADATE&lt;/TD&gt;
&lt;TD width="64"&gt;TRT1M&lt;/TD&gt;
&lt;TD width="117"&gt;recursive mean&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;001081&lt;/TD&gt;
&lt;TD&gt;2004-01-31&lt;/TD&gt;
&lt;TD&gt;-1.8322&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;001081&lt;/TD&gt;
&lt;TD&gt;2004-02-29&lt;/TD&gt;
&lt;TD&gt;4.3713&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;001081&lt;/TD&gt;
&lt;TD&gt;2004-03-31&lt;/TD&gt;
&lt;TD&gt;-11.9811&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;001081&lt;/TD&gt;
&lt;TD&gt;2004-04-30&lt;/TD&gt;
&lt;TD&gt;2.8939&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;001081&lt;/TD&gt;
&lt;TD&gt;2004-05-31&lt;/TD&gt;
&lt;TD&gt;2.2396&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;001081&lt;/TD&gt;
&lt;TD&gt;2004-06-30&lt;/TD&gt;
&lt;TD&gt;-6.5373&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;001081&lt;/TD&gt;
&lt;TD&gt;2004-07-31&lt;/TD&gt;
&lt;TD&gt;-4.6448&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;001081&lt;/TD&gt;
&lt;TD&gt;2004-08-31&lt;/TD&gt;
&lt;TD&gt;-10.4598&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;001081&lt;/TD&gt;
&lt;TD&gt;2004-09-30&lt;/TD&gt;
&lt;TD&gt;2.0539&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;001081&lt;/TD&gt;
&lt;TD&gt;2004-10-31&lt;/TD&gt;
&lt;TD&gt;-8.2390&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;001081&lt;/TD&gt;
&lt;TD&gt;2004-11-30&lt;/TD&gt;
&lt;TD&gt;10.0413&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;001081&lt;/TD&gt;
&lt;TD&gt;2004-12-31&lt;/TD&gt;
&lt;TD&gt;3.2500&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;001081&lt;/TD&gt;
&lt;TD&gt;2005-01-31&lt;/TD&gt;
&lt;TD&gt;-18.2809&lt;/TD&gt;
&lt;TD&gt;-2.01&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;001081&lt;/TD&gt;
&lt;TD&gt;2005-02-28&lt;/TD&gt;
&lt;TD&gt;-14.8889&lt;/TD&gt;
&lt;TD&gt;-1.55&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;001081&lt;/TD&gt;
&lt;TD&gt;2005-03-31&lt;/TD&gt;
&lt;TD&gt;-2.0979&lt;/TD&gt;
&lt;TD&gt;-3.61&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;001096&lt;/TD&gt;
&lt;TD&gt;2004-01-31&lt;/TD&gt;
&lt;TD&gt;-4.0816&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;001096&lt;/TD&gt;
&lt;TD&gt;2004-02-29&lt;/TD&gt;
&lt;TD&gt;4.6809&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;001096&lt;/TD&gt;
&lt;TD&gt;2004-03-31&lt;/TD&gt;
&lt;TD&gt;-2.8862&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;001096&lt;/TD&gt;
&lt;TD&gt;2004-04-30&lt;/TD&gt;
&lt;TD&gt;-3.1579&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;001096&lt;/TD&gt;
&lt;TD&gt;2004-05-31&lt;/TD&gt;
&lt;TD&gt;-1.0870&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;001096&lt;/TD&gt;
&lt;TD&gt;2004-06-30&lt;/TD&gt;
&lt;TD&gt;2.8132&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;001096&lt;/TD&gt;
&lt;TD&gt;2004-07-31&lt;/TD&gt;
&lt;TD&gt;-3.2258&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;001096&lt;/TD&gt;
&lt;TD&gt;2004-08-31&lt;/TD&gt;
&lt;TD&gt;3.3333&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;001096&lt;/TD&gt;
&lt;TD&gt;2004-09-30&lt;/TD&gt;
&lt;TD&gt;4.9032&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;001096&lt;/TD&gt;
&lt;TD&gt;2004-10-31&lt;/TD&gt;
&lt;TD&gt;1.6495&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;001096&lt;/TD&gt;
&lt;TD&gt;2004-11-30&lt;/TD&gt;
&lt;TD&gt;5.4767&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;001096&lt;/TD&gt;
&lt;TD&gt;2004-12-31&lt;/TD&gt;
&lt;TD&gt;0.7308&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;001096&lt;/TD&gt;
&lt;TD&gt;2005-01-31&lt;/TD&gt;
&lt;TD&gt;1.7274&lt;/TD&gt;
&lt;TD&gt;0.77&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;001096&lt;/TD&gt;
&lt;TD&gt;2005-02-28&lt;/TD&gt;
&lt;TD&gt;2.0755&lt;/TD&gt;
&lt;TD&gt;1.20&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;</description>
      <pubDate>Mon, 16 Dec 2019 14:41:46 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/recursive-mean/m-p/612033#M76817</guid>
      <dc:creator>sasphd</dc:creator>
      <dc:date>2019-12-16T14:41:46Z</dc:date>
    </item>
    <item>
      <title>Re: recursive mean</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/recursive-mean/m-p/612036#M76818</link>
      <description>&lt;P&gt;Do you have a SAS ETS license?&lt;/P&gt;</description>
      <pubDate>Mon, 16 Dec 2019 14:42:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/recursive-mean/m-p/612036#M76818</guid>
      <dc:creator>PeterClemmensen</dc:creator>
      <dc:date>2019-12-16T14:42:37Z</dc:date>
    </item>
    <item>
      <title>Re: recursive mean</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/recursive-mean/m-p/612038#M76819</link>
      <description>&lt;P&gt;yes&lt;/P&gt;</description>
      <pubDate>Mon, 16 Dec 2019 14:44:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/recursive-mean/m-p/612038#M76819</guid>
      <dc:creator>sasphd</dc:creator>
      <dc:date>2019-12-16T14:44:44Z</dc:date>
    </item>
    <item>
      <title>Re: recursive mean</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/recursive-mean/m-p/612040#M76820</link>
      <description>&lt;P&gt;You can do these calculations in PROC EXPAND.&lt;/P&gt;</description>
      <pubDate>Mon, 16 Dec 2019 14:48:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/recursive-mean/m-p/612040#M76820</guid>
      <dc:creator>PaigeMiller</dc:creator>
      <dc:date>2019-12-16T14:48:23Z</dc:date>
    </item>
    <item>
      <title>Re: recursive mean</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/recursive-mean/m-p/612044#M76821</link>
      <description>&lt;P&gt;how ??? can you please give the program&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data test;&lt;BR /&gt;input GVKEY $ DATADATe $ TRT1M $ mean$;&lt;BR /&gt;datalines;&lt;BR /&gt;001081 2004-01-31 -1.8322 .&lt;BR /&gt;001081 2004-02-29 4.3713 .&lt;BR /&gt;001081 2004-03-31 -11.9811 . &lt;BR /&gt;001081 2004-04-30 2.8939 .&lt;BR /&gt;001081 2004-05-31 2.2396 .&lt;BR /&gt;001081 2004-06-30 -6.5373 .&lt;BR /&gt;001081 2004-07-31 -4.6448 .&lt;BR /&gt;001081 2004-08-31 -10.4598 . &lt;BR /&gt;001081 2004-09-30 2.0539 .&lt;BR /&gt;001081 2004-10-31 -8.2390 .&lt;BR /&gt;001081 2004-11-30 10.0413 .&lt;BR /&gt;001081 2004-12-31 3.2500 .&lt;BR /&gt;001081 2005-01-31 -18.2809 -2.01&lt;BR /&gt;001081 2005-02-28 -14.8889 -1.55&lt;BR /&gt;001081 2005-03-31 -2.0979 -3.61&lt;BR /&gt;001096 2004-01-31 -4.0816 .&lt;BR /&gt;001096 2004-02-29 4.6809 .&lt;BR /&gt;001096 2004-03-31 -2.8862 .&lt;BR /&gt;001096 2004-04-30 -3.1579 .&lt;BR /&gt;001096 2004-05-31 -1.0870 .&lt;BR /&gt;001096 2004-06-30 2.8132 .&lt;BR /&gt;001096 2004-07-31 -3.2258 .&lt;BR /&gt;001096 2004-08-31 3.3333 .&lt;BR /&gt;001096 2004-09-30 4.9032 .&lt;BR /&gt;001096 2004-10-31 1.6495 .&lt;BR /&gt;001096 2004-11-30 5.4767 .&lt;BR /&gt;001096 2004-12-31 0.7308 .&lt;BR /&gt;001096 2005-01-31 1.7274 0.77&lt;BR /&gt;001096 2005-02-28 2.0755 1.20&lt;BR /&gt;run;&lt;/P&gt;</description>
      <pubDate>Mon, 16 Dec 2019 14:53:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/recursive-mean/m-p/612044#M76821</guid>
      <dc:creator>sasphd</dc:creator>
      <dc:date>2019-12-16T14:53:45Z</dc:date>
    </item>
    <item>
      <title>Re: recursive mean</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/recursive-mean/m-p/612045#M76822</link>
      <description>&lt;P&gt;Here is an example of a moving average of 3.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://documentation.sas.com/?cdcId=pgmsascdc&amp;amp;cdcVersion=9.4_3.4&amp;amp;docsetId=etsug&amp;amp;docsetTarget=etsug_expand_examples04.htm&amp;amp;locale=en"&gt;https://documentation.sas.com/?cdcId=pgmsascdc&amp;amp;cdcVersion=9.4_3.4&amp;amp;docsetId=etsug&amp;amp;docsetTarget=etsug_expand_examples04.htm&amp;amp;locale=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Since you want a moving average of 12, you'd have to make the obvious modification to the code, and then set to missing any means you don't want.&lt;/P&gt;</description>
      <pubDate>Mon, 16 Dec 2019 14:56:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/recursive-mean/m-p/612045#M76822</guid>
      <dc:creator>PaigeMiller</dc:creator>
      <dc:date>2019-12-16T14:56:48Z</dc:date>
    </item>
    <item>
      <title>Re: recursive mean</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/recursive-mean/m-p/612046#M76823</link>
      <description>&lt;P&gt;I am not sure to understand the example can you please give me the program using my example&lt;/P&gt;</description>
      <pubDate>Mon, 16 Dec 2019 15:06:36 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/recursive-mean/m-p/612046#M76823</guid>
      <dc:creator>sasphd</dc:creator>
      <dc:date>2019-12-16T15:06:36Z</dc:date>
    </item>
    <item>
      <title>Re: recursive mean</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/recursive-mean/m-p/612047#M76824</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/4327"&gt;@sasphd&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You can try this:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data test;
	set have;
	format rec_mean 8.2;
	by GVKEY;
	if first.GVKEY then counter = 0;
	counter+1;
	rec_mean = mean(lag2(TRT1M),lag3(TRT1M),lag4(TRT1M),lag5(TRT1M),
										 lag6(TRT1M),lag7(TRT1M),lag8(TRT1M),lag9(TRT1M),
										 lag10(TRT1M),lag11(TRT1M),lag12(TRT1M));
	if counter &amp;lt;= 12 then call missing(rec_mean);
	drop counter;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 16 Dec 2019 15:07:06 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/recursive-mean/m-p/612047#M76824</guid>
      <dc:creator>ed_sas_member</dc:creator>
      <dc:date>2019-12-16T15:07:06Z</dc:date>
    </item>
    <item>
      <title>Re: recursive mean</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/recursive-mean/m-p/612048#M76825</link>
      <description>&lt;P&gt;Give it a try. If you get stuck, show us the code you tried that isn't working.&lt;/P&gt;</description>
      <pubDate>Mon, 16 Dec 2019 15:07:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/recursive-mean/m-p/612048#M76825</guid>
      <dc:creator>PaigeMiller</dc:creator>
      <dc:date>2019-12-16T15:07:24Z</dc:date>
    </item>
    <item>
      <title>Re: recursive mean</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/recursive-mean/m-p/612049#M76826</link>
      <description>&lt;P&gt;Are the posted values your actual desired data?&lt;/P&gt;</description>
      <pubDate>Mon, 16 Dec 2019 15:08:02 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/recursive-mean/m-p/612049#M76826</guid>
      <dc:creator>PeterClemmensen</dc:creator>
      <dc:date>2019-12-16T15:08:02Z</dc:date>
    </item>
    <item>
      <title>Re: recursive mean</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/recursive-mean/m-p/612051#M76827</link>
      <description>&lt;P&gt;it works &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;thanks to everybody&lt;/P&gt;</description>
      <pubDate>Mon, 16 Dec 2019 15:16:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/recursive-mean/m-p/612051#M76827</guid>
      <dc:creator>sasphd</dc:creator>
      <dc:date>2019-12-16T15:16:15Z</dc:date>
    </item>
    <item>
      <title>Re: recursive mean</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/recursive-mean/m-p/612067#M76828</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input GVKEY	DATADATE : yymmdd10.	TRT1M;*	recursive mean;
format datadate yymmdd10.;
cards;
001081	2004-01-31	-1.8322	 
001081	2004-02-29	4.3713	 
001081	2004-03-31	-11.9811	 
001081	2004-04-30	2.8939	 
001081	2004-05-31	2.2396	 
001081	2004-06-30	-6.5373	 
001081	2004-07-31	-4.6448	 
001081	2004-08-31	-10.4598	 
001081	2004-09-30	2.0539	 
001081	2004-10-31	-8.2390	 
001081	2004-11-30	10.0413	 
001081	2004-12-31	3.2500	 
001081	2005-01-31	-18.2809	-2.01
001081	2005-02-28	-14.8889	-1.55
001081	2005-03-31	-2.0979	-3.61
001096	2004-01-31	-4.0816	 
001096	2004-02-29	4.6809	 
001096	2004-03-31	-2.8862	 
001096	2004-04-30	-3.1579	 
001096	2004-05-31	-1.0870	 
001096	2004-06-30	2.8132	 
001096	2004-07-31	-3.2258	 
001096	2004-08-31	3.3333	 
001096	2004-09-30	4.9032	 
001096	2004-10-31	1.6495	 
001096	2004-11-30	5.4767	 
001096	2004-12-31	0.7308	 
001096	2005-01-31	1.7274	0.77
001096	2005-02-28	2.0755	1.20
;
proc sql;
create table want as
select a.gvkey,a.datadate,a.TRT1M,ifn(count(*)=11,mean(b.TRT1M),.) as rec_mean format=8.2
from have a left join have b
on a.gvkey=b.gvkey and intnx('mon',a.DATADATE,-12,'e')&amp;lt;= b.DATADATE&amp;lt;=intnx('mon',a.DATADATE,-2,'e')
group by a.gvkey,a.datadate,a.TRT1M
order by  a.gvkey,a.datadate;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 16 Dec 2019 16:33:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/recursive-mean/m-p/612067#M76828</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2019-12-16T16:33:22Z</dc:date>
    </item>
    <item>
      <title>Re: recursive mean</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/recursive-mean/m-p/612085#M76829</link>
      <description>&lt;P&gt;Had some free time during lunch break for some HASH fun &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input GVKEY	DATADATE : yymmdd10.	TRT1M;*	recursive mean;
format datadate yymmdd10.;
cards;
001081	2004-01-31	-1.8322	 
001081	2004-02-29	4.3713	 
001081	2004-03-31	-11.9811	 
001081	2004-04-30	2.8939	 
001081	2004-05-31	2.2396	 
001081	2004-06-30	-6.5373	 
001081	2004-07-31	-4.6448	 
001081	2004-08-31	-10.4598	 
001081	2004-09-30	2.0539	 
001081	2004-10-31	-8.2390	 
001081	2004-11-30	10.0413	 
001081	2004-12-31	3.2500	 
001081	2005-01-31	-18.2809	-2.01
001081	2005-02-28	-14.8889	-1.55
001081	2005-03-31	-2.0979	-3.61
001096	2004-01-31	-4.0816	 
001096	2004-02-29	4.6809	 
001096	2004-03-31	-2.8862	 
001096	2004-04-30	-3.1579	 
001096	2004-05-31	-1.0870	 
001096	2004-06-30	2.8132	 
001096	2004-07-31	-3.2258	 
001096	2004-08-31	3.3333	 
001096	2004-09-30	4.9032	 
001096	2004-10-31	1.6495	 
001096	2004-11-30	5.4767	 
001096	2004-12-31	0.7308	 
001096	2005-01-31	1.7274	0.77
001096	2005-02-28	2.0755	1.20
;

data want;
if _n_=1 then do;
   dcl hash H () ;
   h.definekey  ("datadate") ;
   h.definedata ("rec_mean") ;
   h.definedone () ;
 end;
 do _n_=1 by 1 until(last.gvkey);
  set have;
  by gvkey;
  array t(0:10) _temporary_;
  t(mod(_n_,11))=TRT1M;
  if n(of t(*))=11 then do;
    rec_mean=mean(of t(*));
    h.add(key:intnx('mon',datadate,2,'e'),data:rec_mean);
  end;
  if h.find() ne 0 then call missing(rec_mean);
  output;
 end;
 h.clear();
 call missing(of t(*));
 format rec_mean 8.2;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 16 Dec 2019 17:15:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/recursive-mean/m-p/612085#M76829</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2019-12-16T17:15:38Z</dc:date>
    </item>
  </channel>
</rss>

