<?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 sum for every x rolling months (for horizontal data) in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Calculating-sum-for-every-x-rolling-months-for-horizontal-data/m-p/414190#M101474</link>
    <description>&lt;P&gt;ChrisNZ's code worked. But there is a reason for macro. My actual data has PSW measured on a daily basis for a whole year, so I've psw1-psw365 (not just psw1-5 in the example). And I wanted to calculate&amp;nbsp;sum based on every 30 days. So my Want data would have 365 sum values (i.e. Sumvalue 1 - Sumvalue335).&lt;/P&gt;
&lt;P&gt;I guess I can write then out as sumvalue(i) = value(i) + value(i+1) + value(i+2) + value(i+3) ..... + value(i+29).&lt;/P&gt;
&lt;P&gt;But I wondered why when I wrote sumvalue(i) = sum(of value(i) - value(i+29), it didn't work. I assumed the issue lies in i+29. So I used&amp;nbsp;%eval and the macro.&lt;/P&gt;
&lt;P&gt;But the macro didn't seem to accept the sum of function.&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Thu, 16 Nov 2017 23:34:45 GMT</pubDate>
    <dc:creator>Solph</dc:creator>
    <dc:date>2017-11-16T23:34:45Z</dc:date>
    <item>
      <title>Calculating sum for every x rolling months (for horizontal data)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculating-sum-for-every-x-rolling-months-for-horizontal-data/m-p/414167#M101463</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I have a horizontal data that’s measured on monthly bases for 5 months. I wanted to calculate a moving sum based on every 2 months. Here is my code, why doesn’t it work?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thanks in advanced. Here is the data I have.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input id psw1 psw2 psw3 psw4 psw5;
datalines;
1 10 20 30 10 10
2 10 30 40 10 20
;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Here is the data I want:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
input id psw1 psw2 psw3 psw4 psw5 sumvalue1 sumvalue2 sumvalue3 sumvalue4 ;
datalines;
1 10 20 30 10 10 30 50 40 20 
2 10 30 40 10 20 40 70 50 30
;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Here is my code:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
set have;
array value(5) psw1-psw5;
array sumvalue(4) sumvalue1-sumvalue4;
%macro get();
%do i=1 %to 4;
%let i2=%eval(&amp;amp;i.+1); 
Sumvalue(&amp;amp;i) =sum(of value(&amp;amp;i)-value(&amp;amp;i2));
%end;
%mend;
%get;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 16 Nov 2017 22:38:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculating-sum-for-every-x-rolling-months-for-horizontal-data/m-p/414167#M101463</guid>
      <dc:creator>Solph</dc:creator>
      <dc:date>2017-11-16T22:38:38Z</dc:date>
    </item>
    <item>
      <title>Re: Calculating sum for every x rolling months (for horizontal data)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculating-sum-for-every-x-rolling-months-for-horizontal-data/m-p/414182#M101471</link>
      <description>&lt;P&gt;No need for macros.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input id psw1 psw2 psw3 psw4 psw5;
datalines;
1 10 20 30 10 10
2 10 30 40 10 20
run;

data WANT;
  set HAVE;
  array VALUE(5) PSW1-PSW5;
  array SUMVALUE(4) SUMVALUE1-SUMVALUE4;
  do I=1 to 4;
   SUMVALUE(I) = VALUE[I]+VALUE[I+1];
  end;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;DIV class="branch"&gt;
&lt;DIV&gt;
&lt;DIV align="center"&gt;
&lt;TABLE class="table" summary="Procedure Print: Data Set WORK.WANT" frame="box" rules="all" cellspacing="0" cellpadding="5"&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH class="r header" scope="col"&gt;id&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;psw1&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;psw2&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;psw3&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;psw4&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;psw5&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;SUMVALUE1&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;SUMVALUE2&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;SUMVALUE3&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;SUMVALUE4&lt;/TH&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;TD class="r data"&gt;10&lt;/TD&gt;
&lt;TD class="r data"&gt;20&lt;/TD&gt;
&lt;TD class="r data"&gt;30&lt;/TD&gt;
&lt;TD class="r data"&gt;10&lt;/TD&gt;
&lt;TD class="r data"&gt;10&lt;/TD&gt;
&lt;TD class="r data"&gt;30&lt;/TD&gt;
&lt;TD class="r data"&gt;50&lt;/TD&gt;
&lt;TD class="r data"&gt;40&lt;/TD&gt;
&lt;TD class="r data"&gt;20&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="r data"&gt;2&lt;/TD&gt;
&lt;TD class="r data"&gt;10&lt;/TD&gt;
&lt;TD class="r data"&gt;30&lt;/TD&gt;
&lt;TD class="r data"&gt;40&lt;/TD&gt;
&lt;TD class="r data"&gt;10&lt;/TD&gt;
&lt;TD class="r data"&gt;20&lt;/TD&gt;
&lt;TD class="r data"&gt;40&lt;/TD&gt;
&lt;TD class="r data"&gt;70&lt;/TD&gt;
&lt;TD class="r data"&gt;50&lt;/TD&gt;
&lt;TD class="r data"&gt;30&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 16 Nov 2017 23:16:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculating-sum-for-every-x-rolling-months-for-horizontal-data/m-p/414182#M101471</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2017-11-16T23:16:29Z</dc:date>
    </item>
    <item>
      <title>Re: Calculating sum for every x rolling months (for horizontal data)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculating-sum-for-every-x-rolling-months-for-horizontal-data/m-p/414183#M101472</link>
      <description>&lt;P&gt;Is there a specific reason you're using macros?&lt;/P&gt;</description>
      <pubDate>Thu, 16 Nov 2017 23:17:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculating-sum-for-every-x-rolling-months-for-horizontal-data/m-p/414183#M101472</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2017-11-16T23:17:15Z</dc:date>
    </item>
    <item>
      <title>Re: Calculating sum for every x rolling months (for horizontal data)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculating-sum-for-every-x-rolling-months-for-horizontal-data/m-p/414190#M101474</link>
      <description>&lt;P&gt;ChrisNZ's code worked. But there is a reason for macro. My actual data has PSW measured on a daily basis for a whole year, so I've psw1-psw365 (not just psw1-5 in the example). And I wanted to calculate&amp;nbsp;sum based on every 30 days. So my Want data would have 365 sum values (i.e. Sumvalue 1 - Sumvalue335).&lt;/P&gt;
&lt;P&gt;I guess I can write then out as sumvalue(i) = value(i) + value(i+1) + value(i+2) + value(i+3) ..... + value(i+29).&lt;/P&gt;
&lt;P&gt;But I wondered why when I wrote sumvalue(i) = sum(of value(i) - value(i+29), it didn't work. I assumed the issue lies in i+29. So I used&amp;nbsp;%eval and the macro.&lt;/P&gt;
&lt;P&gt;But the macro didn't seem to accept the sum of function.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 16 Nov 2017 23:34:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculating-sum-for-every-x-rolling-months-for-horizontal-data/m-p/414190#M101474</guid>
      <dc:creator>Solph</dc:creator>
      <dc:date>2017-11-16T23:34:45Z</dc:date>
    </item>
    <item>
      <title>Re: Calculating sum for every x rolling months (for horizontal data)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculating-sum-for-every-x-rolling-months-for-horizontal-data/m-p/414193#M101475</link>
      <description>&lt;P&gt;It's still a fixed number so there's no need for macros. The indexes for an array will handle it fine.&lt;/P&gt;</description>
      <pubDate>Thu, 16 Nov 2017 23:45:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculating-sum-for-every-x-rolling-months-for-horizontal-data/m-p/414193#M101475</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2017-11-16T23:45:23Z</dc:date>
    </item>
    <item>
      <title>Re: Calculating sum for every x rolling months (for horizontal data)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculating-sum-for-every-x-rolling-months-for-horizontal-data/m-p/414199#M101477</link>
      <description>&lt;P&gt;I expanded the data (to 30 variables, psw1-psw30) and applied the code for sum of every 3 rolling days, in two ways:&lt;/P&gt;
&lt;P&gt;Code 1: use sumvalue(i) = value(i)+value(i+1)+value(i+2). It works.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Code 2: use sumvalue(i) = sum(of value(i) - value(i+2)), using sum off but it didn't work. The error message said "ERROR 22-322: Syntax error, expecting one of the following: ), ','. &amp;nbsp;"&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;It would be great if it's a simple fix for code 2. Otherwise I'll stick to code 1 and expand to write each component up to value(i+29). Thanks.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here is the expanded data and code 1.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input id psw1 psw2 psw3 psw4 psw5 psw6 psw7 psw8 psw9 psw10
psw11 psw12 psw13 psw14 psw15 psw16 psw17 psw18 psw19 psw20
psw21 psw22 psw23 psw24 psw25 psw26 psw27 psw28 psw29 psw30;
datalines;
1 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3
2 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7
;
run;
*Code 1;
data WANT;
  set HAVE;
  array value(30) PSW1-PSW30;
  array SumValue (28) SumValue1 - SumValue28;
  do i=1 to 28;
   SumValue(i) = value[i]+value[i+1]+value[i+2];
  end;
run;
proc print noobs; var psw1-psw30; run;
proc print noobs; var sumvalue1-SumValue28; run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;Here is code 2 that didn't work.&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;*Code 2;
data WANT;
  set HAVE;
  array value(30) PSW1-PSW30;
  array SumValue (28) SumValue1 - SumValue28;
  do i=1 to 28;
   SumValue(i) = sum(of value[i]-value[i+2]);
  end;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 17 Nov 2017 00:24:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculating-sum-for-every-x-rolling-months-for-horizontal-data/m-p/414199#M101477</guid>
      <dc:creator>Solph</dc:creator>
      <dc:date>2017-11-17T00:24:12Z</dc:date>
    </item>
    <item>
      <title>Re: Calculating sum for every x rolling months (for horizontal data)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculating-sum-for-every-x-rolling-months-for-horizontal-data/m-p/414200#M101478</link>
      <description>&lt;P&gt;Your formula's aren't the same so why would you expect them to be the same?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Doesn't work - and you can't use OF&amp;nbsp;with the array indices in that manner&lt;/P&gt;
&lt;PRE class=" language-sas"&gt;&lt;CODE class="  language-sas"&gt;&lt;SPAN class="token function"&gt;SumValue(i) = sum&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;of &lt;SPAN class="token keyword"&gt;value&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;[&lt;/SPAN&gt;i&lt;SPAN class="token punctuation"&gt;]&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;-&lt;/SPAN&gt;&lt;SPAN class="token keyword"&gt;value&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;[&lt;/SPAN&gt;i&lt;SPAN class="token operator"&gt;+&lt;/SPAN&gt;&lt;SPAN class="token number"&gt;2&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;vs&amp;nbsp;&lt;/P&gt;
&lt;PRE class=" language-sas"&gt;&lt;CODE class="  language-sas"&gt;  SumValue&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;i&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt; &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; &lt;SPAN class="token keyword"&gt;value&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;[&lt;/SPAN&gt;i&lt;SPAN class="token punctuation"&gt;]&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;+&lt;/SPAN&gt;&lt;SPAN class="token keyword"&gt;value&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;[&lt;/SPAN&gt;i&lt;SPAN class="token operator"&gt;+&lt;/SPAN&gt;&lt;SPAN class="token number"&gt;1&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 keyword"&gt;value&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;[&lt;/SPAN&gt;i&lt;SPAN class="token operator"&gt;+&lt;/SPAN&gt;&lt;SPAN class="token number"&gt;2&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;If there's a chance you have missing data, you want to use the SUM() function rather than +, with + any missing included sets it to missing.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE class=" language-sas"&gt;&lt;CODE class="  language-sas"&gt;  SumValue&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;i&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt; &lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt; sum(&lt;SPAN class="token keyword"&gt;value&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;[&lt;/SPAN&gt;i&lt;SPAN class="token punctuation"&gt;], &lt;/SPAN&gt;&lt;SPAN class="token keyword"&gt;value&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;[&lt;/SPAN&gt;i&lt;SPAN class="token operator"&gt;+&lt;/SPAN&gt;&lt;SPAN class="token number"&gt;1&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;], &lt;/SPAN&gt;&lt;SPAN class="token keyword"&gt;value&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;[&lt;/SPAN&gt;i&lt;SPAN class="token operator"&gt;+&lt;/SPAN&gt;&lt;SPAN class="token number"&gt;2&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;I would consider adding&amp;nbsp;a nested inner loop to do the sum so it's more dynamic. That way if you're summing a window of 2 or 20 it doesn't matter.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 17 Nov 2017 00:58:28 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculating-sum-for-every-x-rolling-months-for-horizontal-data/m-p/414200#M101478</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2017-11-17T00:58:28Z</dc:date>
    </item>
    <item>
      <title>Re: Calculating sum for every x rolling months (for horizontal data)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculating-sum-for-every-x-rolling-months-for-horizontal-data/m-p/414204#M101479</link>
      <description>&lt;P&gt;In this case you do need macro, and the formula you want is probably&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;SUM&amp;amp;i= sum( of VALUE&amp;amp;i. - VALUE%eval(&amp;amp;i+2) );&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;No need for an array.&lt;/P&gt;</description>
      <pubDate>Fri, 17 Nov 2017 01:24:41 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculating-sum-for-every-x-rolling-months-for-horizontal-data/m-p/414204#M101479</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2017-11-17T01:24:41Z</dc:date>
    </item>
    <item>
      <title>Re: Calculating sum for every x rolling months (for horizontal data)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculating-sum-for-every-x-rolling-months-for-horizontal-data/m-p/414215#M101481</link>
      <description>&lt;P&gt;Thanks Reeza. I guess sum(of psw1-psw28) works, but not when array is used (e.g. sum(of value(i)-value(i+2).&lt;/P&gt;
&lt;P&gt;Thanks ChrisNZ. It worked. Thanks a lot.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro get();
data WANT;
  set HAVE;
  %do i=1 %to 28;
   SumValue&amp;amp;i = sum(of psw&amp;amp;i - psw%eval(&amp;amp;i+2));
  %end;
run;
%mend;
%get;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 17 Nov 2017 02:09:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculating-sum-for-every-x-rolling-months-for-horizontal-data/m-p/414215#M101481</guid>
      <dc:creator>Solph</dc:creator>
      <dc:date>2017-11-17T02:09:38Z</dc:date>
    </item>
  </channel>
</rss>

