<?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: Need help in return calculation for multiple accounts with multiple transactions in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Need-help-in-return-calculation-for-multiple-accounts-with/m-p/522419#M141824</link>
    <description>&lt;P&gt;1. Provide you data in a SAS program, so we don't have to do this for you&lt;/P&gt;
&lt;P&gt;See&lt;/P&gt;
&lt;P&gt;&lt;A href="https://communities.sas.com/t5/SAS-Communities-Library/How-to-create-a-data-step-version-of-your-data-AKA-generate/ta-p/258712" target="_blank" rel="noopener noreferrer"&gt;How to convert datasets to data steps&lt;/A&gt;&lt;BR /&gt;&lt;A href="https://gist.githubusercontent.com/statgeek/bcc55940dd825a13b9c8ca40a904cba9/raw/865d2cf18f5150b8e887218dde0fc3951d0ff15b/data2datastep.sas" target="_blank" rel="nofollow noopener noreferrer noopener noreferrer"&gt;The macro for direct download&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;2. Provide the expected output and the logic&lt;/P&gt;</description>
    <pubDate>Wed, 19 Dec 2018 03:50:52 GMT</pubDate>
    <dc:creator>ChrisNZ</dc:creator>
    <dc:date>2018-12-19T03:50:52Z</dc:date>
    <item>
      <title>Need help in return calculation for multiple accounts with multiple transactions</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Need-help-in-return-calculation-for-multiple-accounts-with/m-p/522414#M141821</link>
      <description>&lt;P&gt;Hi Everyone,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I need to calculate the returns for&amp;nbsp;following transactions on a FIFO (first in first out) basis:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;SEDOL&lt;/TD&gt;&lt;TD&gt;trade_date&lt;/TD&gt;&lt;TD&gt;Buy_volume&lt;/TD&gt;&lt;TD&gt;Sell_volume&lt;/TD&gt;&lt;TD&gt;Buy_price&lt;/TD&gt;&lt;TD&gt;Sell_price&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426299&lt;/TD&gt;&lt;TD&gt;15/11/2006&lt;/TD&gt;&lt;TD&gt;706000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;28.32&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426299&lt;/TD&gt;&lt;TD&gt;24/11/2006&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;350000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;28.24&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426299&lt;/TD&gt;&lt;TD&gt;20/12/2006&lt;/TD&gt;&lt;TD&gt;300000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;28.89&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426299&lt;/TD&gt;&lt;TD&gt;2/01/2007&lt;/TD&gt;&lt;TD&gt;260000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;29.17&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426299&lt;/TD&gt;&lt;TD&gt;26/01/2007&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;300000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;29.57&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426299&lt;/TD&gt;&lt;TD&gt;8/02/2007&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;356000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;30.04&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426299&lt;/TD&gt;&lt;TD&gt;2/03/2007&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;130000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;29.51&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426299&lt;/TD&gt;&lt;TD&gt;5/03/2007&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;130000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;28.91&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426299&lt;/TD&gt;&lt;TD&gt;15/03/2012&lt;/TD&gt;&lt;TD&gt;133000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;22.7&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426299&lt;/TD&gt;&lt;TD&gt;29/03/2012&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;133000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;22.07&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426300&lt;/TD&gt;&lt;TD&gt;16/11/2006&lt;/TD&gt;&lt;TD&gt;500000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;5.5&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426300&lt;/TD&gt;&lt;TD&gt;20/11/2006&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;150000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;5.9&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426300&lt;/TD&gt;&lt;TD&gt;12/12/2006&lt;/TD&gt;&lt;TD&gt;175000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;5.7&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426300&lt;/TD&gt;&lt;TD&gt;5/01/2007&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;225000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;6.1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426300&lt;/TD&gt;&lt;TD&gt;16/01/2007&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;200000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;6.12&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426300&lt;/TD&gt;&lt;TD&gt;18/02/2007&lt;/TD&gt;&lt;TD&gt;160000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;6.07&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426300&lt;/TD&gt;&lt;TD&gt;2/03/2007&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;60000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;6.11&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426300&lt;/TD&gt;&lt;TD&gt;15/03/2007&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;100000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;6.13&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426300&lt;/TD&gt;&lt;TD&gt;25/03/2012&lt;/TD&gt;&lt;TD&gt;120000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;6.11&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426300&lt;/TD&gt;&lt;TD&gt;29/03/2012&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;220000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;6.21&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Can someone please help with the SAS code? Thanks in advance for your help.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 19 Dec 2018 02:43:09 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Need-help-in-return-calculation-for-multiple-accounts-with/m-p/522414#M141821</guid>
      <dc:creator>bd_user_10</dc:creator>
      <dc:date>2018-12-19T02:43:09Z</dc:date>
    </item>
    <item>
      <title>Re: Need help in return calculation for multiple accounts with multiple transactions</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Need-help-in-return-calculation-for-multiple-accounts-with/m-p/522419#M141824</link>
      <description>&lt;P&gt;1. Provide you data in a SAS program, so we don't have to do this for you&lt;/P&gt;
&lt;P&gt;See&lt;/P&gt;
&lt;P&gt;&lt;A href="https://communities.sas.com/t5/SAS-Communities-Library/How-to-create-a-data-step-version-of-your-data-AKA-generate/ta-p/258712" target="_blank" rel="noopener noreferrer"&gt;How to convert datasets to data steps&lt;/A&gt;&lt;BR /&gt;&lt;A href="https://gist.githubusercontent.com/statgeek/bcc55940dd825a13b9c8ca40a904cba9/raw/865d2cf18f5150b8e887218dde0fc3951d0ff15b/data2datastep.sas" target="_blank" rel="nofollow noopener noreferrer noopener noreferrer"&gt;The macro for direct download&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;2. Provide the expected output and the logic&lt;/P&gt;</description>
      <pubDate>Wed, 19 Dec 2018 03:50:52 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Need-help-in-return-calculation-for-multiple-accounts-with/m-p/522419#M141824</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2018-12-19T03:50:52Z</dc:date>
    </item>
    <item>
      <title>Re: Need help in return calculation for multiple accounts with multiple transactions</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Need-help-in-return-calculation-for-multiple-accounts-with/m-p/522425#M141828</link>
      <description>&lt;P&gt;Using arrays:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input SEDOL trade_date :ddmmyy10. Buy_volume Sell_volume Buy_price Sell_price;
format trade_date yymmdd10.;
datalines;
2426299	15/11/2006	706000	0	28.32	0
2426299	24/11/2006	0	250000	0	28.24
2426299	20/12/2006	300000	0	28.89	0
2426299	2/01/2007	260000	0	29.17	0
2426299	26/01/2007	0	300000	0	29.57
2426299	8/02/2007	0	356000	0	30.04
2426299	2/03/2007	0	130000	0	29.51
2426299	5/03/2007	0	130000	0	28.91
2426299	15/03/2012	133000	0	22.7	0
2426299	29/03/2012	0	133000	0	22.07
2426300	16/11/2006	500000	0	5.5	0
2426300	20/11/2006	0	150000	0	5.9
2426300	12/12/2006	175000	0	5.7	0
2426300	5/01/2007	0	225000	0	6.1
2426300	16/01/2007	0	200000	0	6.12
2426300	18/02/2007	160000	0	6.07	0
2426300	2/03/2007	0	60000	0	6.11
2426300	15/03/2007	0	100000	0	6.13
2426300	25/03/2012	120000	0	6.11	0
2426300	29/03/2012	0	220000	0	6.21
;

data want;
array p{999};
array v{999};
bCount = 0;
return = 0;
do until(last.sedol);
    set have; by sedol;
    if Buy_volume &amp;gt; 0 then do;
        bCount = bCount + 1;
        p{bCount} = Buy_price;
        v{bCount} = Buy_volume;
        end;
    sv = Sell_volume;
    do i = 1 to dim(v) while (sv &amp;gt; 0);
        if missing(v{i}) then do;
            leave;
            end;
        rs = min(sv, v{i});
        return = return + rs*p{i};
        v{i} = v{i} - rs;
        sv = sv - rs;
        end;
    output;
    end;
keep SEDOL trade_date Buy_volume Sell_volume Buy_price Sell_price return;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 19 Dec 2018 04:47:02 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Need-help-in-return-calculation-for-multiple-accounts-with/m-p/522425#M141828</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2018-12-19T04:47:02Z</dc:date>
    </item>
    <item>
      <title>Re: Need help in return calculation for multiple accounts with multiple transactions</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Need-help-in-return-calculation-for-multiple-accounts-with/m-p/522471#M141857</link>
      <description>&lt;P&gt;Hi PGStats,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you for your codes. Unfortunately, it does not give the return of each trade. Instead, it gives me cumulative sell volume buy price in perfect order! Your codes give me the following output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;return&lt;/TD&gt;&lt;TD&gt;SEDOL&lt;/TD&gt;&lt;TD&gt;trade_date&lt;/TD&gt;&lt;TD&gt;Buy_volume&lt;/TD&gt;&lt;TD&gt;Sell_volume&lt;/TD&gt;&lt;TD&gt;Buy_price&lt;/TD&gt;&lt;TD&gt;Sell_price&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;2426299&lt;/TD&gt;&lt;TD&gt;15/11/2006&lt;/TD&gt;&lt;TD&gt;706000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;28.32&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;9912000&lt;/TD&gt;&lt;TD&gt;2426299&lt;/TD&gt;&lt;TD&gt;24/11/2006&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;350000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;28.24&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;9912000&lt;/TD&gt;&lt;TD&gt;2426299&lt;/TD&gt;&lt;TD&gt;20/12/2006&lt;/TD&gt;&lt;TD&gt;300000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;28.89&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;9912000&lt;/TD&gt;&lt;TD&gt;2426299&lt;/TD&gt;&lt;TD&gt;2/01/2007&lt;/TD&gt;&lt;TD&gt;260000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;29.17&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;18408000&lt;/TD&gt;&lt;TD&gt;2426299&lt;/TD&gt;&lt;TD&gt;26/01/2007&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;300000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;29.57&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;28660920&lt;/TD&gt;&lt;TD&gt;2426299&lt;/TD&gt;&lt;TD&gt;8/02/2007&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;356000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;30.04&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;32453020&lt;/TD&gt;&lt;TD&gt;2426299&lt;/TD&gt;&lt;TD&gt;2/03/2007&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;130000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;29.51&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;36245120&lt;/TD&gt;&lt;TD&gt;2426299&lt;/TD&gt;&lt;TD&gt;5/03/2007&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;130000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;28.91&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;36245120&lt;/TD&gt;&lt;TD&gt;2426299&lt;/TD&gt;&lt;TD&gt;15/03/2012&lt;/TD&gt;&lt;TD&gt;133000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;22.7&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;39264220&lt;/TD&gt;&lt;TD&gt;2426299&lt;/TD&gt;&lt;TD&gt;29/03/2012&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;133000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;22.07&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;2426300&lt;/TD&gt;&lt;TD&gt;16/11/2006&lt;/TD&gt;&lt;TD&gt;500000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;5.5&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;825000&lt;/TD&gt;&lt;TD&gt;2426300&lt;/TD&gt;&lt;TD&gt;20/11/2006&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;150000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;5.9&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;825000&lt;/TD&gt;&lt;TD&gt;2426300&lt;/TD&gt;&lt;TD&gt;12/12/2006&lt;/TD&gt;&lt;TD&gt;175000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;5.7&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2062500&lt;/TD&gt;&lt;TD&gt;2426300&lt;/TD&gt;&lt;TD&gt;5/01/2007&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;225000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;6.1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3177500&lt;/TD&gt;&lt;TD&gt;2426300&lt;/TD&gt;&lt;TD&gt;16/01/2007&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;200000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;6.12&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3177500&lt;/TD&gt;&lt;TD&gt;2426300&lt;/TD&gt;&lt;TD&gt;18/02/2007&lt;/TD&gt;&lt;TD&gt;160000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;6.07&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3519500&lt;/TD&gt;&lt;TD&gt;2426300&lt;/TD&gt;&lt;TD&gt;2/03/2007&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;60000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;6.11&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4111700&lt;/TD&gt;&lt;TD&gt;2426300&lt;/TD&gt;&lt;TD&gt;15/03/2007&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;100000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;6.13&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4111700&lt;/TD&gt;&lt;TD&gt;2426300&lt;/TD&gt;&lt;TD&gt;25/03/2012&lt;/TD&gt;&lt;TD&gt;120000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;6.11&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5451900&lt;/TD&gt;&lt;TD&gt;2426300&lt;/TD&gt;&lt;TD&gt;29/03/2012&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;220000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;6.21&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;However, using your codes i have managed to calculate what i needed. Since i am&amp;nbsp;new in coding i have done it very novice way. Here is what i have done;&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 want;
array p{999};
array v{999};
bCount = 0;
cum_svol_buy_value = 0;
do until(last.sedol);
    set have; by sedol;
    if Buy_volume &amp;gt; 0 then do;
        bCount = bCount + 1;
        p{bCount} = Buy_price;
        v{bCount} = Buy_volume;
        end;
    sv = Sell_volume;
    do i = 1 to dim(v) while (sv &amp;gt; 0);
        if missing(v{i}) then do;
            leave;
            end;
        rs = min(sv, v{i});
        cum_svol_buy_value = cum_svol_buy_value + rs*p{i};
        v{i} = v{i} - rs;
        sv = sv - rs;
        end;
	svol_sell_value = Sell_volume*sell_price;
    output;
    end;
keep SEDOL trade_date Buy_volume Sell_volume Buy_price Sell_price cum_svol_buy_value svol_sell_value;
run;

data want;
set want; 
svol_buy_value = cum_svol_buy_value-lag1(cum_svol_buy_value);
run;

data want;
set want; 
by SEDOL;
if first.SEDOL then svol_buy_value = Sell_volume*sell_price;
run;

data want;
set want;&lt;BR /&gt;drop cum_svol_buy_value;&lt;BR /&gt;&lt;/CODE&gt;&lt;CODE class=" language-sas"&gt;return = (svol_sell_value-svol_buy_value)/svol_buy_value; &lt;BR /&gt;run; &lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;These codes give me the following results;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;SEDOL&lt;/TD&gt;&lt;TD&gt;trade_date&lt;/TD&gt;&lt;TD&gt;Buy_volume&lt;/TD&gt;&lt;TD&gt;Sell_volume&lt;/TD&gt;&lt;TD&gt;Buy_price&lt;/TD&gt;&lt;TD&gt;Sell_price&lt;/TD&gt;&lt;TD&gt;svol_sell_value&lt;/TD&gt;&lt;TD&gt;svol_buy_value&lt;/TD&gt;&lt;TD&gt;return&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426299&lt;/TD&gt;&lt;TD&gt;15/11/2006&lt;/TD&gt;&lt;TD&gt;706000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;28.32&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426299&lt;/TD&gt;&lt;TD&gt;24/11/2006&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;350000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;28.24&lt;/TD&gt;&lt;TD&gt;9884000&lt;/TD&gt;&lt;TD&gt;9912000&lt;/TD&gt;&lt;TD&gt;-0.00282&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426299&lt;/TD&gt;&lt;TD&gt;20/12/2006&lt;/TD&gt;&lt;TD&gt;300000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;28.89&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426299&lt;/TD&gt;&lt;TD&gt;2/01/2007&lt;/TD&gt;&lt;TD&gt;260000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;29.17&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426299&lt;/TD&gt;&lt;TD&gt;26/01/2007&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;300000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;29.57&lt;/TD&gt;&lt;TD&gt;8871000&lt;/TD&gt;&lt;TD&gt;8496000&lt;/TD&gt;&lt;TD&gt;0.04414&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426299&lt;/TD&gt;&lt;TD&gt;8/02/2007&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;356000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;30.04&lt;/TD&gt;&lt;TD&gt;10694240&lt;/TD&gt;&lt;TD&gt;10252920&lt;/TD&gt;&lt;TD&gt;0.04304&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426299&lt;/TD&gt;&lt;TD&gt;2/03/2007&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;130000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;29.51&lt;/TD&gt;&lt;TD&gt;3836300&lt;/TD&gt;&lt;TD&gt;3792100&lt;/TD&gt;&lt;TD&gt;0.01166&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426299&lt;/TD&gt;&lt;TD&gt;5/03/2007&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;130000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;28.91&lt;/TD&gt;&lt;TD&gt;3758300&lt;/TD&gt;&lt;TD&gt;3792100&lt;/TD&gt;&lt;TD&gt;-0.00891&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426299&lt;/TD&gt;&lt;TD&gt;15/03/2012&lt;/TD&gt;&lt;TD&gt;133000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;22.7&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426299&lt;/TD&gt;&lt;TD&gt;29/03/2012&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;133000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;22.07&lt;/TD&gt;&lt;TD&gt;2935310&lt;/TD&gt;&lt;TD&gt;3019100&lt;/TD&gt;&lt;TD&gt;-0.02775&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426300&lt;/TD&gt;&lt;TD&gt;16/11/2006&lt;/TD&gt;&lt;TD&gt;500000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;5.5&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426300&lt;/TD&gt;&lt;TD&gt;20/11/2006&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;150000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;5.9&lt;/TD&gt;&lt;TD&gt;885000&lt;/TD&gt;&lt;TD&gt;825000&lt;/TD&gt;&lt;TD&gt;0.07273&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426300&lt;/TD&gt;&lt;TD&gt;12/12/2006&lt;/TD&gt;&lt;TD&gt;175000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;5.7&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426300&lt;/TD&gt;&lt;TD&gt;5/01/2007&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;225000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;6.1&lt;/TD&gt;&lt;TD&gt;1372500&lt;/TD&gt;&lt;TD&gt;1237500&lt;/TD&gt;&lt;TD&gt;0.10909&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426300&lt;/TD&gt;&lt;TD&gt;16/01/2007&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;200000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;6.12&lt;/TD&gt;&lt;TD&gt;1224000&lt;/TD&gt;&lt;TD&gt;1115000&lt;/TD&gt;&lt;TD&gt;0.09776&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426300&lt;/TD&gt;&lt;TD&gt;18/02/2007&lt;/TD&gt;&lt;TD&gt;160000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;6.07&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426300&lt;/TD&gt;&lt;TD&gt;2/03/2007&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;60000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;6.11&lt;/TD&gt;&lt;TD&gt;366600&lt;/TD&gt;&lt;TD&gt;342000&lt;/TD&gt;&lt;TD&gt;0.07193&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426300&lt;/TD&gt;&lt;TD&gt;15/03/2007&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;100000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;6.13&lt;/TD&gt;&lt;TD&gt;613000&lt;/TD&gt;&lt;TD&gt;592200&lt;/TD&gt;&lt;TD&gt;0.03512&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426300&lt;/TD&gt;&lt;TD&gt;25/03/2012&lt;/TD&gt;&lt;TD&gt;120000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;6.11&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2426300&lt;/TD&gt;&lt;TD&gt;29/03/2012&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;220000&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;6.21&lt;/TD&gt;&lt;TD&gt;1366200&lt;/TD&gt;&lt;TD&gt;1340200&lt;/TD&gt;&lt;TD&gt;0.0194&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks.&lt;/P&gt;</description>
      <pubDate>Wed, 19 Dec 2018 10:40:58 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Need-help-in-return-calculation-for-multiple-accounts-with/m-p/522471#M141857</guid>
      <dc:creator>bd_user_10</dc:creator>
      <dc:date>2018-12-19T10:40:58Z</dc:date>
    </item>
    <item>
      <title>Re: Need help in return calculation for multiple accounts with multiple transactions</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Need-help-in-return-calculation-for-multiple-accounts-with/m-p/522496#M141863</link>
      <description>&lt;P&gt;You didn't post the output yet .&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 SEDOL trade_date :ddmmyy10. Buy_volume Sell_volume Buy_price Sell_price;

buy=Buy_volume * Buy_price ;
sell=Sell_volume * Sell_price ;

format trade_date yymmdd10.;
datalines;
2426299	15/11/2006	706000	0	28.32	0
2426299	24/11/2006	0	250000	0	28.24
2426299	20/12/2006	300000	0	28.89	0
2426299	2/01/2007	260000	0	29.17	0
2426299	26/01/2007	0	300000	0	29.57
2426299	8/02/2007	0	356000	0	30.04
2426299	2/03/2007	0	130000	0	29.51
2426299	5/03/2007	0	130000	0	28.91
2426299	15/03/2012	133000	0	22.7	0
2426299	29/03/2012	0	133000	0	22.07
2426300	16/11/2006	500000	0	5.5	0
2426300	20/11/2006	0	150000	0	5.9
2426300	12/12/2006	175000	0	5.7	0
2426300	5/01/2007	0	225000	0	6.1
2426300	16/01/2007	0	200000	0	6.12
2426300	18/02/2007	160000	0	6.07	0
2426300	2/03/2007	0	60000	0	6.11
2426300	15/03/2007	0	100000	0	6.13
2426300	25/03/2012	120000	0	6.11	0
2426300	29/03/2012	0	220000	0	6.21
;

data want;
 set have;
 by SEDOL;
 if first.SEDOL then call missing(cum_sell,cum_buy);
 cum_buy+buy;
 cum_sell+sell;
 return=cum_sell-cum_buy;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 19 Dec 2018 12:46:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Need-help-in-return-calculation-for-multiple-accounts-with/m-p/522496#M141863</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2018-12-19T12:46:35Z</dc:date>
    </item>
    <item>
      <title>Re: Need help in return calculation for multiple accounts with multiple transactions</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Need-help-in-return-calculation-for-multiple-accounts-with/m-p/522739#M141968</link>
      <description>&lt;P&gt;I get slightly different results with:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
array p{999};
array v{999};
bCount = 0;
do until(last.sedol);
    set have; by sedol;
    originalBuyValue = 0;
    sellValue = 0;
    if Buy_volume &amp;gt; 0 then do;
        bCount = bCount + 1;
        p{bCount} = Buy_price;
        v{bCount} = Buy_volume;
        end;
    sv = Sell_volume;
    do i = 1 to dim(v) while (sv &amp;gt; 0);
        if missing(v{i}) then do;
            put "Note: Short selling of " SEDOL " on " trade_date;
            leave;
            end;
        rs = min(sv, v{i});
        originalBuyValue = originalBuyValue + rs*p{i};
        sellValue = sellValue + rs*Sell_price;
        v{i} = v{i} - rs;
        sv = sv - rs;
        end;
    if originalBuyValue &amp;gt; 0 then 
        return = (sellValue - originalBuyValue) / originalBuyValue;
    else call missing(return);
    output;
    end;
keep SEDOL trade_date Buy_volume Sell_volume Buy_price 
    Sell_price return sellValue originalBuyValue;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;PRE&gt;                        Buy_    Sell_   Buy_  Sell_  original      sell
   SEDOL   trade_date  volume  volume  price  price  BuyValue     Value   return

  2426299  2006-11-15  706000       0  28.32   0.00         0         0    .
  2426299  2006-11-24       0  250000   0.00  28.24   7080000   7060000  -0.00282
  2426299  2006-12-20  300000       0  28.89   0.00         0         0    .
  2426299  2007-01-02  260000       0  29.17   0.00         0         0    .
  2426299  2007-01-26       0  300000   0.00  29.57   8496000   8871000   0.04414
  2426299  2007-02-08       0  356000   0.00  30.04  10195920  10694240   0.04887
  2426299  2007-03-02       0  130000   0.00  29.51   3764100   3836300   0.01918
  2426299  2007-03-05       0  130000   0.00  28.91   3792100   3758300  -0.00891
  2426299  2012-03-15  133000       0  22.70   0.00         0         0    .
  2426299  2012-03-29       0  133000   0.00  22.07   3666100   2935310  -0.19934
  2426300  2006-11-16  500000       0   5.50   0.00         0         0    .
  2426300  2006-11-20       0  150000   0.00   5.90    825000    885000   0.07273
  2426300  2006-12-12  175000       0   5.70   0.00         0         0    .
  2426300  2007-01-05       0  225000   0.00   6.10   1237500   1372500   0.10909
  2426300  2007-01-16       0  200000   0.00   6.12   1115000   1224000   0.09776
  2426300  2007-02-18  160000       0   6.07   0.00         0         0    .
  2426300  2007-03-02       0   60000   0.00   6.11    342000    366600   0.07193
  2426300  2007-03-15       0  100000   0.00   6.13    592200    613000   0.03512
  2426300  2012-03-25  120000       0   6.11   0.00         0         0    .
  2426300  2012-03-29       0  220000   0.00   6.21   1340200   1366200   0.01940
&lt;/PRE&gt;</description>
      <pubDate>Wed, 19 Dec 2018 22:56:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Need-help-in-return-calculation-for-multiple-accounts-with/m-p/522739#M141968</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2018-12-19T22:56:43Z</dc:date>
    </item>
    <item>
      <title>Re: Need help in return calculation for multiple accounts with multiple transactions</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Need-help-in-return-calculation-for-multiple-accounts-with/m-p/525631#M143031</link>
      <description>These codes work fantastically!</description>
      <pubDate>Wed, 09 Jan 2019 02:37:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Need-help-in-return-calculation-for-multiple-accounts-with/m-p/525631#M143031</guid>
      <dc:creator>bd_user_10</dc:creator>
      <dc:date>2019-01-09T02:37:15Z</dc:date>
    </item>
  </channel>
</rss>

