<?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 Product for a selected observations of the same variable in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Calculating-Product-for-a-selected-observations-of-the-same/m-p/335815#M76056</link>
    <description>&lt;P&gt;Of course you can do this in SAS &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;I'm assuming your question is how do you do this in SAS?&amp;nbsp;&lt;/P&gt;
&lt;P&gt;When googling I suggest limiting search to lexjansen.com or include SAS NOTES.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;1. Why are you missing months in your data?&amp;nbsp;&lt;/P&gt;
&lt;P&gt;2. How do you account for missing months?&lt;/P&gt;
&lt;P&gt;3. How do calculate the rate at the yearly boundaries, does it reset at some point?&amp;nbsp;&lt;/P&gt;
&lt;P&gt;4. How big is your dataset - 5 million is different than 200 million.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;There's a geomean function but that would mean transposing your dataset. The best methods are to look at PROC EXPAND, usually under time series in EG or convert to logs and then use proc means and revert back to regular scale. The second option is detailed here:&amp;nbsp;&lt;A href="http://support.sas.com/kb/25/366.html" target="_blank"&gt;http://support.sas.com/kb/25/366.html&lt;/A&gt;&lt;/P&gt;</description>
    <pubDate>Sat, 25 Feb 2017 06:03:34 GMT</pubDate>
    <dc:creator>Reeza</dc:creator>
    <dc:date>2017-02-25T06:03:34Z</dc:date>
    <item>
      <title>Calculating Product for a selected observations of the same variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculating-Product-for-a-selected-observations-of-the-same/m-p/335811#M76054</link>
      <description>&lt;DIV&gt;I need to calculate modified deitz return (Which is basically geometric mean of periodic return after adjusting Cash Flow and weighted Cash flow). You calculate monthly return, and for larger periods take geometric mean for it. Say you have monthly return and you can calculate annual return by taking Geometric mean. &amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I am manipulating data in SAS EG so I can use the dataset in SAS VA for a Report.&lt;DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Geometric Mean=(1+r1)*(1+r2)...... -1&lt;/DIV&gt;&lt;DIV&gt;r1, r2== are monthly returns.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;The idea is to select a random period Date_From and Date_To and the pre-calculated Rate of return come up.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;STRONG&gt;I have calculated the monthly return with adjusted cash flow, I am strugling to get a Geometric mean/Cumulative Return.&lt;/STRONG&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;STRONG&gt;I HAVE:&lt;/STRONG&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;TABLE border="1" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Client&lt;/TD&gt;&lt;TD&gt;Financial Product&lt;/TD&gt;&lt;TD&gt;Date&lt;/TD&gt;&lt;TD&gt;Return&lt;/TD&gt;&lt;TD&gt;Return +1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Customer A&lt;/TD&gt;&lt;TD&gt;Product A&lt;/TD&gt;&lt;TD&gt;Jan2016&lt;/TD&gt;&lt;TD&gt;2%&lt;/TD&gt;&lt;TD&gt;$1.02&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Product A&lt;/TD&gt;&lt;TD&gt;Feb2016&lt;/TD&gt;&lt;TD&gt;3%&lt;/TD&gt;&lt;TD&gt;$1.03&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Product A&lt;/TD&gt;&lt;TD&gt;Mar2016&lt;/TD&gt;&lt;TD&gt;1%&lt;/TD&gt;&lt;TD&gt;$1.01&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Product A&lt;/TD&gt;&lt;TD&gt;Apr2016&lt;/TD&gt;&lt;TD&gt;7%&lt;/TD&gt;&lt;TD&gt;$1.07&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Product A&lt;/TD&gt;&lt;TD&gt;May2016&lt;/TD&gt;&lt;TD&gt;-5%&lt;/TD&gt;&lt;TD&gt;$0.95&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Product A&lt;/TD&gt;&lt;TD&gt;Jun2016&lt;/TD&gt;&lt;TD&gt;3%&lt;/TD&gt;&lt;TD&gt;$1.03&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Product A&lt;/TD&gt;&lt;TD&gt;Jul2016&lt;/TD&gt;&lt;TD&gt;-0.50%&lt;/TD&gt;&lt;TD&gt;$1.00&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Product A&lt;/TD&gt;&lt;TD&gt;Aug2016&lt;/TD&gt;&lt;TD&gt;3%&lt;/TD&gt;&lt;TD&gt;$1.03&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Product A&lt;/TD&gt;&lt;TD&gt;Sep2016&lt;/TD&gt;&lt;TD&gt;2%&lt;/TD&gt;&lt;TD&gt;$1.02&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Product A&lt;/TD&gt;&lt;TD&gt;Oct2016&lt;/TD&gt;&lt;TD&gt;5%&lt;/TD&gt;&lt;TD&gt;$1.05&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Product A&lt;/TD&gt;&lt;TD&gt;Nov2016&lt;/TD&gt;&lt;TD&gt;1%&lt;/TD&gt;&lt;TD&gt;$1.01&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Product A&lt;/TD&gt;&lt;TD&gt;Dec2016&lt;/TD&gt;&lt;TD&gt;-1%&lt;/TD&gt;&lt;TD&gt;$0.99&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Customer A&lt;/TD&gt;&lt;TD&gt;Product B&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;....&lt;/TD&gt;&lt;TD&gt;....&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;.....&lt;/TD&gt;&lt;TD&gt;.....&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;.......&lt;/TD&gt;&lt;TD&gt;.......&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;.........&lt;/TD&gt;&lt;TD&gt;.........&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;.........&lt;/TD&gt;&lt;TD&gt;.........&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;STRONG&gt;I WANT:&lt;/STRONG&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;TABLE border="1" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Financial Product&lt;/TD&gt;&lt;TD&gt;Date_From&lt;/TD&gt;&lt;TD&gt;Date_To&lt;/TD&gt;&lt;TD&gt;GM_Formulae&lt;/TD&gt;&lt;TD&gt;Cumulative Return&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Product A&lt;/TD&gt;&lt;TD&gt;Jan2016&lt;/TD&gt;&lt;TD&gt;Feb2016&lt;/TD&gt;&lt;TD&gt;(1+r2)-1&lt;/TD&gt;&lt;TD&gt;2.00%&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Product A&lt;/TD&gt;&lt;TD&gt;Jan2016&lt;/TD&gt;&lt;TD&gt;Mar2016&lt;/TD&gt;&lt;TD&gt;(1+r2)*(1+r3)-1&lt;/TD&gt;&lt;TD&gt;5.06%&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Product A&lt;/TD&gt;&lt;TD&gt;Jan2016&lt;/TD&gt;&lt;TD&gt;Apr2016&lt;/TD&gt;&lt;TD&gt;....&lt;/TD&gt;&lt;TD&gt;....&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Product A&lt;/TD&gt;&lt;TD&gt;Jan2016&lt;/TD&gt;&lt;TD&gt;May2016&lt;/TD&gt;&lt;TD&gt;.....&lt;/TD&gt;&lt;TD&gt;.....&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Product A&lt;/TD&gt;&lt;TD&gt;Jan2016&lt;/TD&gt;&lt;TD&gt;Jun2016&lt;/TD&gt;&lt;TD&gt;.......&lt;/TD&gt;&lt;TD&gt;.......&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Product A&lt;/TD&gt;&lt;TD&gt;Jan2016&lt;/TD&gt;&lt;TD&gt;Jul2016&lt;/TD&gt;&lt;TD&gt;.........&lt;/TD&gt;&lt;TD&gt;.........&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Product A&lt;/TD&gt;&lt;TD&gt;Jan2016&lt;/TD&gt;&lt;TD&gt;Aug2016&lt;/TD&gt;&lt;TD&gt;.........&lt;/TD&gt;&lt;TD&gt;.........&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Product A&lt;/TD&gt;&lt;TD&gt;Jan2016&lt;/TD&gt;&lt;TD&gt;Sep2016&lt;/TD&gt;&lt;TD&gt;....&lt;/TD&gt;&lt;TD&gt;....&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Product A&lt;/TD&gt;&lt;TD&gt;Jan2016&lt;/TD&gt;&lt;TD&gt;Oct2016&lt;/TD&gt;&lt;TD&gt;.....&lt;/TD&gt;&lt;TD&gt;.....&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Product A&lt;/TD&gt;&lt;TD&gt;Jan2016&lt;/TD&gt;&lt;TD&gt;Nov2016&lt;/TD&gt;&lt;TD&gt;.......&lt;/TD&gt;&lt;TD&gt;.......&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Product A&lt;/TD&gt;&lt;TD&gt;Jan2016&lt;/TD&gt;&lt;TD&gt;Dec2016&lt;/TD&gt;&lt;TD&gt;(1+r1)*(1+r2)....*(1+r11)-1&lt;/TD&gt;&lt;TD&gt;23.16%&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Product A&lt;/TD&gt;&lt;TD&gt;Feb2016&lt;/TD&gt;&lt;TD&gt;Mar2016&lt;/TD&gt;&lt;TD&gt;.........&lt;/TD&gt;&lt;TD&gt;.........&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Product A&lt;/TD&gt;&lt;TD&gt;Feb2016&lt;/TD&gt;&lt;TD&gt;Apr2016&lt;/TD&gt;&lt;TD&gt;....&lt;/TD&gt;&lt;TD&gt;....&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Product A&lt;/TD&gt;&lt;TD&gt;Feb2016&lt;/TD&gt;&lt;TD&gt;May2016&lt;/TD&gt;&lt;TD&gt;.....&lt;/TD&gt;&lt;TD&gt;.....&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Product A&lt;/TD&gt;&lt;TD&gt;Feb2016&lt;/TD&gt;&lt;TD&gt;Jun2016&lt;/TD&gt;&lt;TD&gt;.......&lt;/TD&gt;&lt;TD&gt;.......&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Product A&lt;/TD&gt;&lt;TD&gt;Feb2016&lt;/TD&gt;&lt;TD&gt;Jul2016&lt;/TD&gt;&lt;TD&gt;.........&lt;/TD&gt;&lt;TD&gt;.........&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Product A&lt;/TD&gt;&lt;TD&gt;Feb2016&lt;/TD&gt;&lt;TD&gt;Aug2016&lt;/TD&gt;&lt;TD&gt;.........&lt;/TD&gt;&lt;TD&gt;.........&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Product A&lt;/TD&gt;&lt;TD&gt;Feb2016&lt;/TD&gt;&lt;TD&gt;Sep2016&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Product A&lt;/TD&gt;&lt;TD&gt;Feb2016&lt;/TD&gt;&lt;TD&gt;Oct2016&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Product A&lt;/TD&gt;&lt;TD&gt;Feb2016&lt;/TD&gt;&lt;TD&gt;Nov2016&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Product A&lt;/TD&gt;&lt;TD&gt;Feb2016&lt;/TD&gt;&lt;TD&gt;Dec2016&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;For 12 months there will be 66 combinations of months&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;The date combinations are easy to create. But I am having trouble calculating Rate of return for all teh 66 combinations. Since it is teh same variable.&lt;/DIV&gt;&lt;DIV&gt;There are ways to this in excel. Since, actual table is millions of rows thats not a possibility. Can this be done in SAS.&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;</description>
      <pubDate>Sat, 25 Feb 2017 05:50:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculating-Product-for-a-selected-observations-of-the-same/m-p/335811#M76054</guid>
      <dc:creator>ksachar</dc:creator>
      <dc:date>2017-02-25T05:50:25Z</dc:date>
    </item>
    <item>
      <title>Re: Calculating Product for a selected observations of the same variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculating-Product-for-a-selected-observations-of-the-same/m-p/335815#M76056</link>
      <description>&lt;P&gt;Of course you can do this in SAS &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;I'm assuming your question is how do you do this in SAS?&amp;nbsp;&lt;/P&gt;
&lt;P&gt;When googling I suggest limiting search to lexjansen.com or include SAS NOTES.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;1. Why are you missing months in your data?&amp;nbsp;&lt;/P&gt;
&lt;P&gt;2. How do you account for missing months?&lt;/P&gt;
&lt;P&gt;3. How do calculate the rate at the yearly boundaries, does it reset at some point?&amp;nbsp;&lt;/P&gt;
&lt;P&gt;4. How big is your dataset - 5 million is different than 200 million.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;There's a geomean function but that would mean transposing your dataset. The best methods are to look at PROC EXPAND, usually under time series in EG or convert to logs and then use proc means and revert back to regular scale. The second option is detailed here:&amp;nbsp;&lt;A href="http://support.sas.com/kb/25/366.html" target="_blank"&gt;http://support.sas.com/kb/25/366.html&lt;/A&gt;&lt;/P&gt;</description>
      <pubDate>Sat, 25 Feb 2017 06:03:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculating-Product-for-a-selected-observations-of-the-same/m-p/335815#M76056</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2017-02-25T06:03:34Z</dc:date>
    </item>
    <item>
      <title>Re: Calculating Product for a selected observations of the same variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculating-Product-for-a-selected-observations-of-the-same/m-p/335824#M76059</link>
      <description>&lt;P&gt;If I was right, that is not geometric mean.&lt;/P&gt;
&lt;P&gt;GM should like : &amp;nbsp;((1+r1)*(1+r2)) **1/2&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;
infile cards expandtabs truncover;
input Client &amp;amp; $20.	FinancialProduct &amp;amp; $20.	 Date : monyy5.	Return : percent8.;
format date monyy. return percentn8.2;
cards;
Customer A	Product A	Jan2016	2%	$1.02
Customer A 	Product A	Feb2016	3%	$1.03
Customer A 	Product A	Mar2016	1%	$1.01
Customer A 	Product A	Apr2016	7%	$1.07
Customer A 	Product A	May2016	-5%	$0.95
Customer A 	Product A	Jun2016	3%	$1.03
Customer A 	Product A	Jul2016	-0.50%	$1.00
Customer A 	Product A	Aug2016	3%	$1.03
Customer A 	Product A	Sep2016	2%	$1.02
Customer A 	Product A	Oct2016	5%	$1.05
Customer A 	Product A	Nov2016	1%	$1.01
Customer A 	Product A	Dec2016	-1%
;
run;
proc sql ;
create table temp as 
select a.client,a.financialproduct,a.date,b.date as _date,b.return
 from have as a,have as b
  where a.client=b.client and a.financialproduct=b.financialproduct
        and a.date lt b.date
   order by a.client,a.financialproduct,a.date,b.date ;
quit;
data want;
 set temp;
 by client financialproduct date;
 retain cum 1;
 if first.date then cum=1;
 cum=cum*(1+return);
 mean=cum-1;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Sat, 25 Feb 2017 07:12:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculating-Product-for-a-selected-observations-of-the-same/m-p/335824#M76059</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2017-02-25T07:12:24Z</dc:date>
    </item>
    <item>
      <title>Re: Calculating Product for a selected observations of the same variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculating-Product-for-a-selected-observations-of-the-same/m-p/335825#M76060</link>
      <description>&lt;P&gt;It looks like a compound return rate?&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 25 Feb 2017 07:16:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculating-Product-for-a-selected-observations-of-the-same/m-p/335825#M76060</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2017-02-25T07:16:10Z</dc:date>
    </item>
    <item>
      <title>Re: Calculating Product for a selected observations of the same variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculating-Product-for-a-selected-observations-of-the-same/m-p/335828#M76061</link>
      <description>&lt;P&gt;Let's say you have data set have, sorted by customer/product/date, where date is a true sas date variable.&amp;nbsp; You also have&amp;nbsp;the additional vars RET and RETPLUS1, and there are no gaps in the time series.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You want rolling cumulative returns for 2-months, 3-months, .... 12 months:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;Erroneous program removed.&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This program takes advantage of temporary arrays, which have their values automatically retained.&amp;nbsp; We also use the fact that&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3-month cumret =&amp;nbsp; (prior 2-month cumret + 1) * (1 + ret) - 1&lt;/P&gt;
&lt;P&gt;&amp;nbsp; and generally&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; J-month cumret = (prior {J-1}-month cumret + 1) * (1+ret) - 1&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Editted. See the comments below.&amp;nbsp; &lt;STRIKE&gt;So the program first updates 2-month-cumret, then 3-month-cumret, ... 12-month-cumret&lt;/STRIKE&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thanks to &lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/64775"&gt;@ksachar&lt;/a&gt;'s response, I realize that I wan't paying attention to my own advice.&amp;nbsp; First the program should loop from 12 to 2, not 2 to 12.&amp;nbsp; I.e. update 12 month cumret first, then 11 month, etc.&amp;nbsp;&amp;nbsp; And&amp;nbsp;I should update R{1} AFTER the loop, not before.&amp;nbsp; The corrected program follows:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want (drop=N nmonths);
  set have (rename=(date=todate));
  by prod;
  format fromdate yymmddn8.;

  array r {12} _temporary_;
  if first.prod then do;
    N=0;
    call missing(of r{*});
  end;
  N+1;

  do nmonths=12 to 2 by -1;
    if N&amp;lt;nmonths then continue;
    r{nmonths}=(1+ret)*(1+r{nmonths-1})-1;
    cumret=r{nmonths};
    fromdate=intnx('month',todate,1-nmonths,'end');
    output;
  end;

  r{1}=ret;
run;

&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 27 Feb 2017 23:31:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculating-Product-for-a-selected-observations-of-the-same/m-p/335828#M76061</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2017-02-27T23:31:45Z</dc:date>
    </item>
    <item>
      <title>Re: Calculating Product for a selected observations of the same variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculating-Product-for-a-selected-observations-of-the-same/m-p/336269#M76201</link>
      <description>&lt;P&gt;Thanks a lot &lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/18408"&gt;@Ksharp&lt;/a&gt;. You are correct. It is compounded return. If the time period exceeds 12 months , then I have to calculate the annualized return too.&lt;BR /&gt;My real problem is far more complicated than what I presented in "I HAVE". I tried to adjust your code but I am missing something.&lt;BR /&gt;&lt;BR /&gt;Can you help me modify your code for the data bellow (I removed the last variable since you didn't used in your code)&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Customer A ClassA Product A Jan2016 2% $1.02&lt;BR /&gt;Customer A ClassA Product A Feb2016 3% $1.03&lt;BR /&gt;Customer A ClassA Product A Mar2016 1% $1.01&lt;BR /&gt;Customer A ClassA Product A Apr2016 7% $1.07&lt;BR /&gt;Customer A ClassA Product A May2016 -5%&lt;BR /&gt;Customer A ClassA Product A Jun2016 3%&lt;BR /&gt;Customer A ClassA Product A Jul2016 -0.50%&lt;BR /&gt;Customer A ClassA Product A Aug2016 3%&lt;BR /&gt;Customer A ClassA Product A Sep2016 2%&lt;BR /&gt;Customer A ClassA Product A Oct2016 5%&lt;BR /&gt;Customer A ClassA Product A Nov2016 1%&lt;BR /&gt;Customer A ClassA Product A Dec2016 -1%&lt;BR /&gt;Customer A ClassA Product A Jan2015 -2%&lt;BR /&gt;Customer A ClassA Product A Feb2015 0.5%&lt;BR /&gt;Customer A ClassA Product A Mar2015 3%&lt;BR /&gt;Customer A ClassA Product A Apr2015 4%&lt;BR /&gt;Customer A ClassA Product A May2015 6%&lt;BR /&gt;Customer A ClassA Product A Jun2015 -1%&lt;BR /&gt;Customer A ClassA Product A Jul2015 5%&lt;BR /&gt;Customer A ClassA Product A Aug2015 8%&lt;BR /&gt;Customer A ClassA Product A Sep2015 -6%&lt;BR /&gt;Customer A ClassA Product A Oct2015 4%&lt;BR /&gt;Customer A ClassA Product A Nov2015 1.3%&lt;BR /&gt;Customer A ClassA Product A Dec2015 .8%&lt;BR /&gt;Customer A ClassA Product B Jan2016 3%&lt;BR /&gt;Customer A ClassA Product B Feb2016 7%&lt;BR /&gt;Customer A ClassA Product B Mar2016 9%&lt;BR /&gt;Customer A ClassA Product B Apr2016 -2%&lt;BR /&gt;Customer A ClassA Product B May2016 -1%&lt;BR /&gt;Customer A ClassA Product B Jun2016 -4%&lt;BR /&gt;Customer A ClassA Product B Jul2016 -4%&lt;BR /&gt;Customer A ClassA Product B Aug2016 1%&lt;BR /&gt;Customer A ClassA Product B Sep2016 -2%&lt;BR /&gt;Customer A ClassA Product B Oct2016 3%&lt;BR /&gt;Customer A ClassA Product B Nov2016 -5%&lt;BR /&gt;Customer A ClassA Product B Dec2016 6%&lt;BR /&gt;Customer A ClassA Product B Jan2015 -1%&lt;BR /&gt;Customer A ClassA Product B Feb2015 3%&lt;BR /&gt;Customer A ClassA Product B Mar2015 -1%&lt;BR /&gt;Customer A ClassA Product B Apr2015 2%&lt;BR /&gt;Customer A ClassA Product B May2015 -3%&lt;BR /&gt;Customer A ClassA Product B Jun2015 3%&lt;BR /&gt;Customer A ClassA Product B Jul2015 -9%&lt;BR /&gt;Customer A ClassA Product B Aug2015 2%&lt;BR /&gt;Customer A ClassA Product B Sep2015 1%&lt;BR /&gt;Customer A ClassA Product B Oct2015 -2%&lt;BR /&gt;Customer A ClassA Product B Nov2015 3%&lt;BR /&gt;Customer A ClassA Product B Dec2015 -2%&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Thanks once again.&lt;/P&gt;</description>
      <pubDate>Mon, 27 Feb 2017 17:43:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculating-Product-for-a-selected-observations-of-the-same/m-p/336269#M76201</guid>
      <dc:creator>ksachar</dc:creator>
      <dc:date>2017-02-27T17:43:34Z</dc:date>
    </item>
    <item>
      <title>Re: Calculating Product for a selected observations of the same variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculating-Product-for-a-selected-observations-of-the-same/m-p/336357#M76238</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/31461"&gt;@mkeintz&lt;/a&gt;&amp;nbsp;Thank you so very much for responding to my post. I tried the code but it is not giving me correct &lt;STRONG&gt;cumret&lt;/STRONG&gt;. Will you be able to provide me the modified code on this sample data (I have added another variable). Also, Can you share the output so I can compare?&amp;nbsp;want to make sure I am not making any mistake&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;If I need to extend the code to 24 months, will it work if I change :&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE class=" language-sas"&gt;&lt;CODE class="  language-sas"&gt;&lt;SPAN class="token statement"&gt;array&lt;/SPAN&gt; r &lt;SPAN class="token punctuation"&gt;{&lt;/SPAN&gt;&lt;SPAN class="token number"&gt;12&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;}&lt;/SPAN&gt; _temporary_&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;to&lt;/P&gt;&lt;PRE class=" language-sas"&gt;&lt;CODE class="  language-sas"&gt;&lt;SPAN class="token statement"&gt;array&lt;/SPAN&gt; r &lt;SPAN class="token punctuation"&gt;{24&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;}&lt;/SPAN&gt; _temporary_&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;&amp;nbsp;&lt;/P&gt;&lt;P&gt;AND&lt;/P&gt;&lt;PRE class=" language-sas"&gt;&lt;CODE class="  language-sas"&gt; do nmonths&lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt;&lt;SPAN class="token number"&gt;2&lt;/SPAN&gt; to &lt;SPAN class="token number"&gt;12&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;to&lt;/P&gt;&lt;PRE class=" language-sas"&gt;&lt;CODE class="  language-sas"&gt; do nmonths&lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt;&lt;SPAN class="token number"&gt;2&lt;/SPAN&gt; to 24&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 27 Feb 2017 21:46:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculating-Product-for-a-selected-observations-of-the-same/m-p/336357#M76238</guid>
      <dc:creator>ksachar</dc:creator>
      <dc:date>2017-02-27T21:46:15Z</dc:date>
    </item>
    <item>
      <title>Re: Calculating Product for a selected observations of the same variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculating-Product-for-a-selected-observations-of-the-same/m-p/336417#M76264</link>
      <description>&lt;P&gt;Add one more code.&lt;/P&gt;
&lt;P&gt;CODE NOT TESTED.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE class=" language-sas"&gt;&lt;CODE class="  language-sas"&gt;&lt;SPAN class="token procnames"&gt;data&lt;/SPAN&gt; want&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
 &lt;SPAN class="token keyword"&gt;set&lt;/SPAN&gt; temp&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
 &lt;SPAN class="token statement"&gt;by&lt;/SPAN&gt; client financialproduct &lt;SPAN class="token function"&gt;date&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
 &lt;SPAN class="token keyword"&gt;retain&lt;/SPAN&gt; cum &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;if&lt;/SPAN&gt; &lt;SPAN class="token function"&gt;first&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;.&lt;/SPAN&gt;&lt;SPAN class="token function"&gt;date&lt;/SPAN&gt; or month(_date)=1 &lt;SPAN class="token keyword"&gt;then&lt;/SPAN&gt; cum&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;
 cum&lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt;cum&lt;SPAN class="token operator"&gt;*&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token number"&gt;1&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;+&lt;/SPAN&gt;return&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;
 &lt;SPAN class="token function"&gt;mean&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;=&lt;/SPAN&gt;cum&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 procnames"&gt;run&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 28 Feb 2017 02:17:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculating-Product-for-a-selected-observations-of-the-same/m-p/336417#M76264</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2017-02-28T02:17:01Z</dc:date>
    </item>
    <item>
      <title>Re: Calculating Product for a selected observations of the same variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculating-Product-for-a-selected-observations-of-the-same/m-p/336836#M76403</link>
      <description>&lt;P&gt;data customer_dup(keep=cum_sum date_from date_to return prev_return) ;&lt;BR /&gt;retain cum_sum prev_return date_from start_pos position;&lt;BR /&gt;set customer_dup;&lt;BR /&gt;by customer product year;&lt;BR /&gt;if (first.customer or first.product or first.year) then&lt;BR /&gt;do;&lt;BR /&gt;put obs=;&lt;BR /&gt;prev_return=return_cal;cum_sum=return_cal;date_from=month;date_to=month;start_pos=obs;&lt;BR /&gt;end;&lt;BR /&gt;else&lt;BR /&gt;do;&lt;BR /&gt;date_to=month;&lt;BR /&gt;cum_sum=prev_return*return_cal;&lt;BR /&gt;prev_return=cum_sum;&lt;BR /&gt;end;final_cum=cum_sum-1;output;&lt;BR /&gt;if (last.customer or last.product or last.year) then&lt;BR /&gt;do;&lt;BR /&gt;do num=tot_group-1 to 1 by -1; position=start_pos+1;&lt;BR /&gt;do i= 1 to num by 1;&lt;BR /&gt;set customer_dup point=position;&lt;BR /&gt;if (i eq 1) then&lt;BR /&gt;do;date_from=month;date_to=month; prev_return=return_cal;cum_sum=return_cal;end;&lt;BR /&gt;else&lt;BR /&gt;do;&lt;BR /&gt;date_to=month;cum_sum=prev_return*return_cal;prev_return=cum_sum;&lt;BR /&gt;end;final_cum=cum_sum-1; output;&lt;BR /&gt;position=position+1;&lt;BR /&gt;end; start_pos=start_pos+1;&lt;BR /&gt;end;&lt;BR /&gt;end;&lt;BR /&gt;informat date_from date_to MONYY7.;&lt;BR /&gt;format date_from date_to MONYY7.;&lt;BR /&gt;run;&lt;/P&gt;</description>
      <pubDate>Wed, 01 Mar 2017 04:26:57 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculating-Product-for-a-selected-observations-of-the-same/m-p/336836#M76403</guid>
      <dc:creator>lakshmi_74</dc:creator>
      <dc:date>2017-03-01T04:26:57Z</dc:date>
    </item>
    <item>
      <title>Re: Calculating Product for a selected observations of the same variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculating-Product-for-a-selected-observations-of-the-same/m-p/342701#M78580</link>
      <description>&lt;P&gt;This works perfectly. My initial requirement was for a data for 6 years (i.e. 72 months and different combinations for 72 months-- which is nCr =(72C2) = 2556&amp;nbsp;).&amp;nbsp;After discussing with &lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/69177"&gt;@lakshmi_74&lt;/a&gt;lakshmi i made minor changes to the code; removed YEAR in BY statement, anywere in first.year, last.year etc. and the retun was calculated&amp;nbsp;for each Product group (date combinations).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 20 Mar 2017 17:37:31 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculating-Product-for-a-selected-observations-of-the-same/m-p/342701#M78580</guid>
      <dc:creator>ksachar</dc:creator>
      <dc:date>2017-03-20T17:37:31Z</dc:date>
    </item>
    <item>
      <title>Re: Calculating Product for a selected observations of the same variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculating-Product-for-a-selected-observations-of-the-same/m-p/342702#M78581</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/69177"&gt;@lakshmi_74&lt;/a&gt;&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/18408"&gt;@Ksharp&lt;/a&gt;&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/31461"&gt;@mkeintz&lt;/a&gt;&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/13879"&gt;@Reeza&lt;/a&gt;&amp;nbsp;Thank you for finding time and helping me resolve this.&lt;/P&gt;</description>
      <pubDate>Mon, 20 Mar 2017 17:39:09 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculating-Product-for-a-selected-observations-of-the-same/m-p/342702#M78581</guid>
      <dc:creator>ksachar</dc:creator>
      <dc:date>2017-03-20T17:39:09Z</dc:date>
    </item>
  </channel>
</rss>

