<?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: Base SAS programming_Cumulative sum in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Base-SAS-programming-Cumulative-sum/m-p/319760#M70324</link>
    <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;/* rolling 12-record sums*/&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data want;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; set have;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;by id;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;counter+1;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; if first.id then counter=1;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;_sum+number - ifn(counter&amp;gt;12,lag12(number),0);&lt;/P&gt;
&lt;P&gt;&amp;nbsp; if&amp;nbsp; counter&amp;gt;=12 then cum_sum=_sum;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; drop _sum;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Sun, 18 Dec 2016 01:38:21 GMT</pubDate>
    <dc:creator>mkeintz</dc:creator>
    <dc:date>2016-12-18T01:38:21Z</dc:date>
    <item>
      <title>Base SAS programming_Cumulative sum</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Base-SAS-programming-Cumulative-sum/m-p/319451#M70166</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have a data set with 100 records for customerID 1. I need for every row cumulative sum considering only 12 rows before the current row.&lt;/P&gt;&lt;P&gt;PS: In which case i will not have cumulative sum for the first 12 rows.&lt;/P&gt;&lt;P&gt;How can I do this in SAS?&lt;/P&gt;&lt;P&gt;Thanks in Advance.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;Number&lt;/TD&gt;&lt;TD&gt;cum_sum&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;9&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;11&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;13&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;So on........,&lt;/P&gt;</description>
      <pubDate>Fri, 16 Dec 2016 05:43:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Base-SAS-programming-Cumulative-sum/m-p/319451#M70166</guid>
      <dc:creator>Haritha1</dc:creator>
      <dc:date>2016-12-16T05:43:45Z</dc:date>
    </item>
    <item>
      <title>Re: Base SAS programming_Cumulative sum</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Base-SAS-programming-Cumulative-sum/m-p/319453#M70167</link>
      <description>&lt;P&gt;If you have SAS ETS, using PROC EXPAND is the easiest method. Otherwise:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
	ID=1;

	do number=1 to 13;
		output;
	end;
run;

data want;
	set have;
	by id;
	retain running_total counter;

	if first.id then
		do;
			cum_sum=0;
			counter=0;
		end;
	running_total+number;
	counter+1;

	if counter&amp;gt;12 then
		cum_sum=running_total;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;PROC EXPAND&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc expand data=have out=want;
by id;
convert number=cum_sum / transformout=(cusum 12 trimleft 12);
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>Fri, 16 Dec 2016 06:19:06 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Base-SAS-programming-Cumulative-sum/m-p/319453#M70167</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2016-12-16T06:19:06Z</dc:date>
    </item>
    <item>
      <title>Re: Base SAS programming_Cumulative sum</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Base-SAS-programming-Cumulative-sum/m-p/319465#M70172</link>
      <description>&lt;P&gt;If I understand correctly, for each ID:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;On observations 1-12, cum_sum should be missing&lt;/LI&gt;
&lt;LI&gt;On observation 13, cum_sum should be the sum from observations 1-12&lt;/LI&gt;
&lt;LI&gt;On observation 14, cum_sum should be the sum for observations 2-13&lt;/LI&gt;
&lt;/UL&gt;
&lt;P&gt;If that's the case, a DATA step can code it:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data want;&lt;/P&gt;
&lt;P&gt;set have;&lt;/P&gt;
&lt;P&gt;by ID;&lt;/P&gt;
&lt;P&gt;if first.ID then do;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;counter=0;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;temp_sum=0;&lt;/P&gt;
&lt;P&gt;end;&lt;/P&gt;
&lt;P&gt;back12 = lag12(number);&lt;/P&gt;
&lt;P&gt;counter + 1;&lt;/P&gt;
&lt;P&gt;if counter &amp;gt; 12 then do;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;cum_sum = temp_sum;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp;temp_sum = temp_sum - back12;&lt;/P&gt;
&lt;P&gt;end;&lt;/P&gt;
&lt;P&gt;temp_sum + number;&lt;/P&gt;
&lt;P&gt;drop number temp_sum back12;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;It's untested code, and it gives me a headache just to look at it. &amp;nbsp;But it ought to work. &amp;nbsp;Good luck.&lt;/P&gt;</description>
      <pubDate>Fri, 16 Dec 2016 08:15:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Base-SAS-programming-Cumulative-sum/m-p/319465#M70172</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2016-12-16T08:15:03Z</dc:date>
    </item>
    <item>
      <title>Re: Base SAS programming_Cumulative sum</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Base-SAS-programming-Cumulative-sum/m-p/319486#M70182</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
set have;
by id;
if first.id then counter = 1;
else counter + 1;
cum_sum = sum(
  number,lag(number),lag2(number),lag3(number),lag4(number),lag5(number),
  lag6(number),lag7(number),lag8(number),lag9(number),lag10(number),lag11(number)
);
if counter lt 12 then cum_sum = .;
drop counter;
run;

&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 16 Dec 2016 10:14:16 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Base-SAS-programming-Cumulative-sum/m-p/319486#M70182</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2016-12-16T10:14:16Z</dc:date>
    </item>
    <item>
      <title>Re: Base SAS programming_Cumulative sum</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Base-SAS-programming-Cumulative-sum/m-p/319710#M70295</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
	ID=1;

	do number=1 to 13;
		output;
	end;
run;
data want;
 set have;
 array x{0:11} _temporary_;
 if _n_ le 12 then cum_sum=.;
  else cum_sum=sum(of x{*});
 x{mod(_n_,12)}=number;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Sat, 17 Dec 2016 07:00:06 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Base-SAS-programming-Cumulative-sum/m-p/319710#M70295</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2016-12-17T07:00:06Z</dc:date>
    </item>
    <item>
      <title>Re: Base SAS programming_Cumulative sum</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Base-SAS-programming-Cumulative-sum/m-p/319760#M70324</link>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;/* rolling 12-record sums*/&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data want;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; set have;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;by id;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;counter+1;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; if first.id then counter=1;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;_sum+number - ifn(counter&amp;gt;12,lag12(number),0);&lt;/P&gt;
&lt;P&gt;&amp;nbsp; if&amp;nbsp; counter&amp;gt;=12 then cum_sum=_sum;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; drop _sum;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sun, 18 Dec 2016 01:38:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Base-SAS-programming-Cumulative-sum/m-p/319760#M70324</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2016-12-18T01:38:21Z</dc:date>
    </item>
  </channel>
</rss>

