<?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: How to calculate buy-and-hold return based on daily return data in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/How-to-calculate-buy-and-hold-return-based-on-daily-return-data/m-p/231756#M42198</link>
    <description>Thanks for your help! &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt; &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;</description>
    <pubDate>Tue, 27 Oct 2015 00:47:06 GMT</pubDate>
    <dc:creator>Ariel</dc:creator>
    <dc:date>2015-10-27T00:47:06Z</dc:date>
    <item>
      <title>How to calculate buy-and-hold return based on daily return data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-calculate-buy-and-hold-return-based-on-daily-return-data/m-p/230014#M41674</link>
      <description>&lt;P&gt;&lt;SPAN&gt;Hello,&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;Currently I have multiple daily&amp;nbsp;data for multiple firms of the 5 day, &amp;nbsp;1 month(21 trading days), 3 months&lt;SPAN&gt;(63 trading days)&lt;/SPAN&gt;, 6&lt;SPAN&gt;&amp;nbsp;months&lt;/SPAN&gt;&lt;SPAN&gt;(126 trading days),&amp;nbsp;&lt;/SPAN&gt;9 months&lt;SPAN&gt;(189 trading days)&lt;/SPAN&gt; and &amp;nbsp;12 months&lt;SPAN&gt;(252 trading days)&lt;/SPAN&gt; stock buy-and-hold returns.&lt;/P&gt;&lt;P&gt;MY data is as below: (252 may not be the last data of a firm)&lt;/P&gt;&lt;TABLE cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;P class="p1"&gt;&lt;STRONG&gt;Firm_ID&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p1"&gt;&lt;STRONG&gt;date&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p1"&gt;&lt;STRONG&gt;daye&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p1"&gt;&lt;STRONG&gt;rtn&lt;/STRONG&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P class="p2"&gt;1101&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p2"&gt;2009/8/26&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p2"&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p2"&gt;-0.0173&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P class="p2"&gt;1101&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p2"&gt;2009/8/27&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p2"&gt;2&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p2"&gt;0.00147&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P class="p3"&gt;…&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p4"&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p4"&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p4"&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P class="p2"&gt;1101&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p2"&gt;2010/8/25&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p2"&gt;252&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p2"&gt;0.03&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P class="p2"&gt;1101&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p4"&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p2"&gt;253&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p4"&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P class="p2"&gt;1101&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p4"&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p3"&gt;…&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p4"&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P class="p2"&gt;1102&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p2"&gt;2011/3/23&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p2"&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p2"&gt;0.0014&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P class="p2"&gt;1102&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p2"&gt;2011/3/24&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p2"&gt;2&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p2"&gt;-0.007&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P class="p3"&gt;…&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p4"&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p4"&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p4"&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P class="p2"&gt;1102&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p2"&gt;2011/9/9&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p2"&gt;252&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p2"&gt;0.045&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P class="p2"&gt;1102&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p4"&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p3"&gt;…&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p4"&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P class="p2"&gt;1205&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p2"&gt;2013/2/4&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p2"&gt;1&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p2"&gt;0.065&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;P class="p3"&gt;…&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p4"&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p4"&gt;&amp;nbsp;&lt;/P&gt;&lt;/TD&gt;&lt;TD&gt;&lt;P class="p4"&gt;&amp;nbsp;&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;If I calculate it by hand then:&lt;/P&gt;&lt;P&gt;(1) 5 days: Buy and hold return=(1+ rtn_day1)*(1+rtn_day2)*(1+rtn_day3)*...*(1+rtn_day5)-1&lt;/P&gt;&lt;P&gt;(2) 1 month: BHR=&lt;SPAN&gt;(1+ rtn_&lt;/SPAN&gt;&lt;SPAN&gt;day&lt;/SPAN&gt;&lt;SPAN&gt;1)*(1+&lt;/SPAN&gt;&lt;SPAN&gt;rtn&lt;/SPAN&gt;&lt;SPAN&gt;_&lt;/SPAN&gt;&lt;SPAN&gt;day&lt;/SPAN&gt;&lt;SPAN&gt;2)*(1+&lt;/SPAN&gt;&lt;SPAN&gt;rtn&lt;/SPAN&gt;&lt;SPAN&gt;_&lt;/SPAN&gt;&lt;SPAN&gt;day&lt;/SPAN&gt;&lt;SPAN&gt;3)*...*(1+&lt;/SPAN&gt;&lt;SPAN&gt;rtn&lt;/SPAN&gt;&lt;SPAN&gt;_day21&lt;/SPAN&gt;&lt;SPAN&gt;)-1&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;(3) 3 months: BHR=&lt;SPAN&gt;(1+ rtn_&lt;/SPAN&gt;&lt;SPAN&gt;day&lt;/SPAN&gt;&lt;SPAN&gt;1)*(1+&lt;/SPAN&gt;&lt;SPAN&gt;rtn&lt;/SPAN&gt;&lt;SPAN&gt;_&lt;/SPAN&gt;&lt;SPAN&gt;day&lt;/SPAN&gt;&lt;SPAN&gt;2)*(1+&lt;/SPAN&gt;&lt;SPAN&gt;rtn&lt;/SPAN&gt;&lt;SPAN&gt;_&lt;/SPAN&gt;&lt;SPAN&gt;day&lt;/SPAN&gt;&lt;SPAN&gt;3)*...*(1+&lt;/SPAN&gt;&lt;SPAN&gt;rtn&lt;/SPAN&gt;&lt;SPAN&gt;_day63&lt;/SPAN&gt;&lt;SPAN&gt;)-1&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;....&lt;/P&gt;&lt;P&gt;(6) 12&lt;SPAN&gt;&amp;nbsp;months:&lt;SPAN&gt;BHR=&lt;/SPAN&gt;&lt;SPAN&gt;(1+ rtn_&lt;/SPAN&gt;&lt;SPAN&gt;day&lt;/SPAN&gt;&lt;SPAN&gt;1)*(1+&lt;/SPAN&gt;&lt;SPAN&gt;rtn&lt;/SPAN&gt;&lt;SPAN&gt;_&lt;/SPAN&gt;&lt;SPAN&gt;day&lt;/SPAN&gt;&lt;SPAN&gt;2)*(1+&lt;/SPAN&gt;&lt;SPAN&gt;rtn&lt;/SPAN&gt;&lt;SPAN&gt;_&lt;/SPAN&gt;&lt;SPAN&gt;day&lt;/SPAN&gt;&lt;SPAN&gt;3)*...*(1+&lt;/SPAN&gt;&lt;SPAN&gt;rtn&lt;/SPAN&gt;&lt;SPAN&gt;_day252&lt;/SPAN&gt;&lt;SPAN&gt;)-1&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;However, I don't know how to write a sas program to do this... &amp;nbsp;&lt;/P&gt;&lt;P&gt;Please give me some&amp;nbsp;suggestions. Thank you!&lt;/P&gt;</description>
      <pubDate>Thu, 15 Oct 2015 06:09:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-calculate-buy-and-hold-return-based-on-daily-return-data/m-p/230014#M41674</guid>
      <dc:creator>Ariel</dc:creator>
      <dc:date>2015-10-15T06:09:01Z</dc:date>
    </item>
    <item>
      <title>Re: How to calculate buy-and-hold return based on daily return data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-calculate-buy-and-hold-return-based-on-daily-return-data/m-p/230028#M41682</link>
      <description>&lt;P&gt;A brute force approach would be (maybe proc timedata is worth looking):&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;%Let Span=5; *!;&lt;/P&gt;&lt;P&gt;Data A;&lt;BR /&gt;&amp;nbsp; Do Firm=1 To 3;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Do i=0 To 20;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Date=IntNX('month',"01JAN2000"d,i,'same');&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; Rtn=RanNor(1)/10;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Output;&lt;BR /&gt;&amp;nbsp;End;&lt;BR /&gt;&amp;nbsp; End;&lt;BR /&gt;&amp;nbsp; Drop i;&lt;BR /&gt;&amp;nbsp; Format Date Date9.;&lt;BR /&gt;Run;&lt;/P&gt;&lt;P&gt;%Macro L;&lt;BR /&gt;%Do i=1 %To &amp;amp;Span.;&lt;BR /&gt;&amp;nbsp; %If &amp;amp;i.=1 %Then %Do;&lt;BR /&gt;&amp;nbsp; Data B;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set A;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; A_Rtn1=(1+Rtn);&lt;BR /&gt;&amp;nbsp; Run;&lt;BR /&gt;&amp;nbsp; %End;&lt;BR /&gt;&amp;nbsp; %Else %Do;&lt;BR /&gt;&amp;nbsp; Data B;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set B;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; By Firm;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; A_Rtn&amp;amp;i.=Lag(A_Rtn%Eval(&amp;amp;i.-1));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If First.Firm Then Call Missing (A_Rtn&amp;amp;i.);&lt;BR /&gt;&amp;nbsp; Run;&lt;BR /&gt;&amp;nbsp; %End;&lt;BR /&gt;%End;&lt;BR /&gt;%Mend;&lt;BR /&gt;%L;&lt;/P&gt;&lt;P&gt;Data B (Drop=A_:);&lt;BR /&gt;&amp;nbsp; Set B;&lt;BR /&gt;&amp;nbsp; Array A A_:;&lt;BR /&gt;&amp;nbsp; Total_Rtn_&amp;amp;Span.=1;&lt;BR /&gt;&amp;nbsp; Do over A;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Total_Rtn_&amp;amp;Span.=Total_Rtn_&amp;amp;Span.*A;&lt;BR /&gt;&amp;nbsp; End;&lt;BR /&gt;&amp;nbsp; Total_Rtn_&amp;amp;Span.=Total_Rtn_&amp;amp;Span.-1;&lt;BR /&gt;Run;&lt;/P&gt;</description>
      <pubDate>Thu, 15 Oct 2015 08:07:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-calculate-buy-and-hold-return-based-on-daily-return-data/m-p/230028#M41682</guid>
      <dc:creator>user24feb</dc:creator>
      <dc:date>2015-10-15T08:07:44Z</dc:date>
    </item>
    <item>
      <title>Re: How to calculate buy-and-hold return based on daily return data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-calculate-buy-and-hold-return-based-on-daily-return-data/m-p/230029#M41683</link>
      <description>&lt;P&gt;However, this would give the same result:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;%Let Span=5; *!;&lt;/P&gt;&lt;P&gt;Data A;&lt;BR /&gt;&amp;nbsp; Do Firm=1 To 3;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Do i=0 To 20;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Date=IntNX('month',"01JAN2000"d,i,'same');&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Rtn=RanNor(1)/10;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Output;&lt;BR /&gt;&amp;nbsp;End;&lt;BR /&gt;&amp;nbsp; End;&lt;BR /&gt;&amp;nbsp; Drop i;&lt;BR /&gt;&amp;nbsp; Format Date Date9.;&lt;BR /&gt;Run;&lt;/P&gt;&lt;P&gt;Data B (Keep=Firm Date Rtn Total_Rtn_&amp;amp;Span.);&lt;BR /&gt;&amp;nbsp; Retain dummy ;&lt;BR /&gt;&amp;nbsp; Set A;&lt;BR /&gt;&amp;nbsp; By Firm;&lt;BR /&gt;&amp;nbsp; If First.Firm Then Do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; count=0;&lt;BR /&gt;&amp;nbsp;dummy=1;&amp;nbsp;&lt;BR /&gt;&amp;nbsp; End;&lt;BR /&gt;&amp;nbsp; count+1;&lt;BR /&gt;&amp;nbsp; Drop_Value=Lag&amp;amp;Span.(Rtn);&amp;nbsp;&lt;BR /&gt;&amp;nbsp; If count gt &amp;amp;Span. Then Do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dummy=dummy*(1+Rtn)/(1+Drop_Value);&lt;BR /&gt;&amp;nbsp; End;&lt;BR /&gt;&amp;nbsp; Else Do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dummy=dummy*(1+Rtn);&lt;BR /&gt;&amp;nbsp; End;&lt;BR /&gt;&amp;nbsp; Total_Rtn_&amp;amp;Span.=dummy-1;&lt;BR /&gt;Run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 15 Oct 2015 08:30:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-calculate-buy-and-hold-return-based-on-daily-return-data/m-p/230029#M41683</guid>
      <dc:creator>user24feb</dc:creator>
      <dc:date>2015-10-15T08:30:14Z</dc:date>
    </item>
    <item>
      <title>Re: How to calculate buy-and-hold return based on daily return data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-calculate-buy-and-hold-return-based-on-daily-return-data/m-p/231756#M42198</link>
      <description>Thanks for your help! &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt; &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;</description>
      <pubDate>Tue, 27 Oct 2015 00:47:06 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-calculate-buy-and-hold-return-based-on-daily-return-data/m-p/231756#M42198</guid>
      <dc:creator>Ariel</dc:creator>
      <dc:date>2015-10-27T00:47:06Z</dc:date>
    </item>
  </channel>
</rss>

