<?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 create a Last-in First-out (LIFO) Algorithm Using Hash Tables in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-Last-in-First-out-LIFO-Algorithm-Using-Hash/m-p/413795#M101312</link>
    <description>&lt;P&gt;You can use the same program I provided in your &lt;A href="https://communities.sas.com/t5/Base-SAS-Programming/Calculating-FIFO-profit-using-Hash-of-Hashes/m-p/413692#M101282" target="_self"&gt;Calculating FIFO Profit using Hash of Hashes&lt;/A&gt;.&amp;nbsp; And just like in that topic, I would suggest not using the hash-of-hashes approach.&amp;nbsp; Instead use a pair of hashes, one for a profile of each cusip, and the other to track stock lots.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I suspect these&amp;nbsp;revisions would be sufficient for LIFO&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Instead of&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#0000ff" face="SAS Monospace" size="2"&gt;&amp;nbsp; do&lt;/FONT&gt;&lt;FONT face="SAS Monospace" size="2"&gt; rc=ilots.setcur(key:cusip,&lt;EM&gt;&lt;STRONG&gt;key:&lt;/STRONG&gt;&lt;/EM&gt;&lt;/FONT&gt;&lt;EM&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="SAS Monospace" size="2"&gt;1&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/EM&gt;&lt;FONT face="SAS Monospace" size="2"&gt;) &lt;/FONT&gt;&lt;FONT color="#0000ff" face="SAS Monospace" size="2"&gt;by&lt;/FONT&gt; &lt;STRONG&gt;&lt;FONT color="#008080" face="SAS Monospace" size="2"&gt;0&lt;/FONT&gt;&lt;/STRONG&gt; &lt;FONT color="#0000ff" face="SAS Monospace" size="2"&gt;until&lt;/FONT&gt;&lt;FONT face="SAS Monospace" size="2"&gt;(total_shrs_to_sell=&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="SAS Monospace" size="2"&gt;0&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="SAS Monospace" size="2"&gt; or lot_cusip^=cusip or rc^=&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="SAS Monospace" size="2"&gt;0&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="SAS Monospace" size="2"&gt;);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;which&amp;nbsp;finds the oldest lot of stocks, you can use&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#0000ff" face="SAS Monospace" size="2"&gt;&amp;nbsp; do&lt;/FONT&gt;&lt;FONT face="SAS Monospace" size="2"&gt; rc=ilots.setcur(key:cusip,&lt;EM&gt;&lt;STRONG&gt;key:n_buys&lt;/STRONG&gt;&lt;/EM&gt;) &lt;/FONT&gt;&lt;FONT color="#0000ff" face="SAS Monospace" size="2"&gt;by&lt;/FONT&gt; &lt;STRONG&gt;&lt;FONT color="#008080" face="SAS Monospace" size="2"&gt;0&lt;/FONT&gt;&lt;/STRONG&gt; &lt;FONT color="#0000ff" face="SAS Monospace" size="2"&gt;until&lt;/FONT&gt;&lt;FONT face="SAS Monospace" size="2"&gt;(total_shrs_to_sell=&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="SAS Monospace" size="2"&gt;0&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="SAS Monospace" size="2"&gt; or lot_cusip^=cusip or rc^=&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="SAS Monospace" size="2"&gt;0&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="SAS Monospace" size="2"&gt;);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;which finds the newest.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;At the bottom of the loop replace&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp; rc=ilots.next();&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;LI-WRAPPER&gt;&lt;/LI-WRAPPER&gt;&lt;/P&gt;
&lt;P&gt;with&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp; rc=ilots.prev();&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Also to accommodate&amp;nbsp;partial lot sales, then instead of&lt;/P&gt;
&lt;P&gt;&lt;FONT face="SAS Monospace" size="2"&gt;&amp;nbsp;&amp;nbsp;b_num=b_num+&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="SAS Monospace" size="2"&gt;.01&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="SAS Monospace" size="2"&gt;; &lt;/FONT&gt;&lt;FONT color="#008000" face="SAS Monospace" size="2"&gt;/*Create a "sublot" (=lot+.01) with remaining avaiable shrs*/&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;you can use&lt;/P&gt;
&lt;P&gt;&lt;FONT face="SAS Monospace" size="2"&gt;&amp;nbsp;&amp;nbsp; b_num=b_num-&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="SAS Monospace" size="2"&gt;.01&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="SAS Monospace" size="2"&gt;; &lt;/FONT&gt;&lt;FONT color="#008000" face="SAS Monospace" size="2"&gt;/*Create a "sublot" (=lot-.01) with remaining avaiable shrs*/&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In the LIFO case, it will have the counterintuitive property of, say, LOT 3 having sublots 2.99, 2.98, etc.&amp;nbsp; But that seems relatively acceptable to maintain the same program structure.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Editted additional note:&amp;nbsp; Of course, if your dataset is small enough you can use the other program without any changes by pre-sorting the input dataset by descending date (it doesn't need to also be sorted by cusip).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Wed, 15 Nov 2017 21:06:15 GMT</pubDate>
    <dc:creator>mkeintz</dc:creator>
    <dc:date>2017-11-15T21:06:15Z</dc:date>
    <item>
      <title>How to create a Last-in First-out (LIFO) Algorithm Using Hash Tables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-Last-in-First-out-LIFO-Algorithm-Using-Hash/m-p/413730#M101296</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have a large dataset of trading data that looks like this:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;data have;&lt;BR /&gt;infile datalines truncover dlm=',' dsd;&lt;BR /&gt;input cusip:$char9. trade_date:mmddyy10. execution_time:time8. buy_sell:$char1. (quantity execution_price trade_id) (:best32.);&lt;BR /&gt;format execution_time time8. trade_date mmddyy10.;&lt;BR /&gt;datalines;&lt;BR /&gt;010831BW4,09/12/2013,12:30:44,B,45,103.133,1325534595&lt;BR /&gt;010831BW4,09/12/2013,14:56:13,B,500,103.303,1325536968&lt;BR /&gt;010831BW4,09/17/2013,13:14:35,S,25,105.244,1326014939&lt;BR /&gt;010831BW4,09/17/2013,15:40:12,S,50,105.369,1326017794&lt;BR /&gt;010831BW4,09/17/2013,16:04:21,S,25,105.244,1326018222&lt;BR /&gt;010831BW4,09/18/2013,10:12:59,S,50,105.369,1326121154&lt;BR /&gt;010831BW4,09/18/2013,11:50:21,S,350,105.015,1326123005&lt;BR /&gt;010831BW4,09/20/2013,11:00:41,B,50,106.308,1326341521&lt;BR /&gt;010831BW4,09/20/2013,11:00:41,S,50,106.308,1326341522&lt;BR /&gt;010831BY0,09/12/2013,12:30:44,B,1075,99.592,1325534596&lt;BR /&gt;010831BY0,09/12/2013,16:51:56,B,350,99.777,1325547689&lt;BR /&gt;010831BY0,09/13/2013,11:01:07,S,20,100.25,1325642219&lt;BR /&gt;010831BY0,09/13/2013,11:03:05,S,330,100.44,1325642259&lt;BR /&gt;010831BY0,10/02/2013,11:07:37,B,50,101.117,1327522086&lt;BR /&gt;010831BY0,10/03/2013,11:54:05,S,50,104.218,1327632245&lt;BR /&gt;;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am trying to match the buy observations with the sell observations (distinguished by the Buy_Sell variable) within each CUSIP using a Last-in Last-out methodology. In other words, each time there is a sale in a CUSIP, I want the quantity most recently purchased in that CUSIP matched to the sale. If more is bought than sold (or sold than bought), then after the final buy or sell observation (whichever comes first) I want the extra quantity discarded and for the program to move on to the next CUSIP. I want my final table to look like this:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;CUSIP&lt;/TD&gt;&lt;TD&gt;Quantity&lt;/TD&gt;&lt;TD&gt;b_id&lt;/TD&gt;&lt;TD&gt;bdate&lt;/TD&gt;&lt;TD&gt;btime&lt;/TD&gt;&lt;TD&gt;bprice&lt;/TD&gt;&lt;TD&gt;s_id&lt;/TD&gt;&lt;TD&gt;sdate&lt;/TD&gt;&lt;TD&gt;stime&lt;/TD&gt;&lt;TD&gt;sprice&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BW4&lt;/TD&gt;&lt;TD&gt;25&lt;/TD&gt;&lt;TD&gt;1325536968&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;14:56:13&lt;/TD&gt;&lt;TD&gt;103.303&lt;/TD&gt;&lt;TD&gt;1326014939&lt;/TD&gt;&lt;TD&gt;17-Sep-13&lt;/TD&gt;&lt;TD&gt;13:14:35&lt;/TD&gt;&lt;TD&gt;105.244&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BW4&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;1325536968&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;14:56:13&lt;/TD&gt;&lt;TD&gt;103.303&lt;/TD&gt;&lt;TD&gt;1326017794&lt;/TD&gt;&lt;TD&gt;17-Sep-13&lt;/TD&gt;&lt;TD&gt;15:40:12&lt;/TD&gt;&lt;TD&gt;105.369&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BW4&lt;/TD&gt;&lt;TD&gt;25&lt;/TD&gt;&lt;TD&gt;1325536968&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;14:56:13&lt;/TD&gt;&lt;TD&gt;103.303&lt;/TD&gt;&lt;TD&gt;1326018222&lt;/TD&gt;&lt;TD&gt;17-Sep-13&lt;/TD&gt;&lt;TD&gt;16:04:21&lt;/TD&gt;&lt;TD&gt;105.244&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BW4&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;1325536968&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;14:56:13&lt;/TD&gt;&lt;TD&gt;103.303&lt;/TD&gt;&lt;TD&gt;1326121154&lt;/TD&gt;&lt;TD&gt;18-Sep-13&lt;/TD&gt;&lt;TD&gt;10:12:59&lt;/TD&gt;&lt;TD&gt;105.369&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BW4&lt;/TD&gt;&lt;TD&gt;350&lt;/TD&gt;&lt;TD&gt;1325536968&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;14:56:13&lt;/TD&gt;&lt;TD&gt;103.303&lt;/TD&gt;&lt;TD&gt;1326123005&lt;/TD&gt;&lt;TD&gt;18-Sep-13&lt;/TD&gt;&lt;TD&gt;11:50:21&lt;/TD&gt;&lt;TD&gt;105.015&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BW4&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;1326341521&lt;/TD&gt;&lt;TD&gt;20-Sep-13&lt;/TD&gt;&lt;TD&gt;11:00:41&lt;/TD&gt;&lt;TD&gt;106.308&lt;/TD&gt;&lt;TD&gt;1326341522&lt;/TD&gt;&lt;TD&gt;20-Sep-13&lt;/TD&gt;&lt;TD&gt;11:00:41&lt;/TD&gt;&lt;TD&gt;106.308&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BY0&lt;/TD&gt;&lt;TD&gt;20&lt;/TD&gt;&lt;TD&gt;1325547689&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;16:51:56&lt;/TD&gt;&lt;TD&gt;$99.78&lt;/TD&gt;&lt;TD&gt;1325642219&lt;/TD&gt;&lt;TD&gt;13-Sep-13&lt;/TD&gt;&lt;TD&gt;11:01:07&lt;/TD&gt;&lt;TD&gt;100.25&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BY0&lt;/TD&gt;&lt;TD&gt;330&lt;/TD&gt;&lt;TD&gt;1325547689&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;16:51:56&lt;/TD&gt;&lt;TD&gt;$99.78&lt;/TD&gt;&lt;TD&gt;1325642259&lt;/TD&gt;&lt;TD&gt;13-Sep-13&lt;/TD&gt;&lt;TD&gt;11:03:05&lt;/TD&gt;&lt;TD&gt;100.44&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BY1&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;1327522086&lt;/TD&gt;&lt;TD&gt;2-Oct-13&lt;/TD&gt;&lt;TD&gt;11:07:37&lt;/TD&gt;&lt;TD&gt;101.117&lt;/TD&gt;&lt;TD&gt;1327632245&lt;/TD&gt;&lt;TD&gt;3-Oct-13&lt;/TD&gt;&lt;TD&gt;11:54:05&lt;/TD&gt;&lt;TD&gt;104.218&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;In order to achieve this, I am using a hash of hashes that changes for each CUSIP and is made up of hash tables and hash iterators for the buy and sell observations. Each time there is a new CUSIP, the two hash tables &lt;SPAN&gt;take all of the buy and sell observations and output them together based on the order that they were brought into the hash table and the quantities that they have. Once the hash tables run out of buy or sell observations in a CUSIP, the additional observations are discarded and the the program moves on to the next CUSIP. Here is my current code:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;data&lt;/STRONG&gt;&amp;nbsp;want;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set have;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if _n_=&lt;STRONG&gt;1&lt;/STRONG&gt; then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; declare hash hoh ();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hoh.definekey('cusip');&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hoh.definedata('cusip','buys','sells','buy','sell');&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hoh.definedone();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; declare hash buys;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; declare hash sells;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; declare hiter buy;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; declare hiter sell;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if hoh.find() ne &lt;STRONG&gt;0&lt;/STRONG&gt; then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; length tid &lt;STRONG&gt;8&lt;/STRONG&gt; b_id bdate btime bprice bquantity quantity s_id sdate stime sprice squantity &lt;STRONG&gt;8&lt;/STRONG&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buys=_new_ hash(ordered:'a');&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buys.defineKey('tid');&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buys.defineData('bdate','btime','bprice','bquantity','b_id', 'b_account', 'b_source', 'b_cusip', 'in14');&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buys.defineDone();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sells=_new_ hash(ordered:'a');&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sells.defineKey('tid');&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sells.defineData('sdate','stime','sprice','squantity','s_id','s_account', 's_cusip');&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sells.defineDone();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buy=_new_ hiter('buys');&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sell=_new_ hiter('sells');&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inventory=&lt;STRONG&gt;0&lt;/STRONG&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tid+&lt;STRONG&gt;1&lt;/STRONG&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if buy_sell="B" then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bdate=trade_date;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; btime=execution_time;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bprice=execution_price;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bquantity=quantity;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b_id=trade_id;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b_account=account_number2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b_source=source;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b_cusip=cusip;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; in14=in14;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inventory+quantity;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; buys.add();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if inventory=&lt;STRONG&gt;0&lt;/STRONG&gt; then delete;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if quantity&amp;gt;inventory then quantity=inventory;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sdate=trade_date;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stime=execution_time;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sprice=execution_price;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; squantity=quantity;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s_id=trade_id;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s_account=account_number2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; s_cusip=cusip;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inventory+(-&lt;STRONG&gt;1&lt;/STRONG&gt;*quantity);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sells.add();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; keep bdate b_account b_source b_cusip b_id bdate btime bprice quantity sdate stime sprice s_id s_account s_cusip in14;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; format bdate sdate date9. bprice sprice dollar8.4 btime stime time12.;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; brc=buy.last();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; src=sell.first();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do while(brc=&lt;STRONG&gt;0&lt;/STRONG&gt; and src=&lt;STRONG&gt;0&lt;/STRONG&gt;);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; when (bquantity &amp;lt; squantity) do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp=squantity-bquantity;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; quantity=bquantity;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; squantity=temp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; brc=buy.prev();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; when (bquantity=squantity) do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; quantity=bquantity;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; brc=buy.prev();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; src=sell.next();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; when (bquantity &amp;gt; squantity) do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp=bquantity-squantity;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; quantity=squantity;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bquantity=temp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; src=sell.next();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; otherwise;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rc=hoh.replace();&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;run&lt;/STRONG&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;When I run this code, the output is all over the place. Usually the output begins correct in each CUSIP, and gets further off as it goes along. It gets especially bad when more is bought in a CUSIP than sold and some quantity needs to be discarded. The output also contains many observations that are full duplicates of previous observations, and uses observations even after their quantity has been used up and the hash table was supposed to move on to the next observation. For the dataset above, this is the output that my code gives:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;CUSIP&lt;/TD&gt;&lt;TD&gt;Quantity&lt;/TD&gt;&lt;TD&gt;b_id&lt;/TD&gt;&lt;TD&gt;bdate&lt;/TD&gt;&lt;TD&gt;btime&lt;/TD&gt;&lt;TD&gt;bprice&lt;/TD&gt;&lt;TD&gt;s_id&lt;/TD&gt;&lt;TD&gt;sdate&lt;/TD&gt;&lt;TD&gt;stime&lt;/TD&gt;&lt;TD&gt;sprice&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BW4&lt;/TD&gt;&lt;TD&gt;25&lt;/TD&gt;&lt;TD&gt;1325536968&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;14:56:13&lt;/TD&gt;&lt;TD&gt;103.303&lt;/TD&gt;&lt;TD&gt;1326014939&lt;/TD&gt;&lt;TD&gt;17-Sep-13&lt;/TD&gt;&lt;TD&gt;13:14:35&lt;/TD&gt;&lt;TD&gt;105.244&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BW4&lt;/TD&gt;&lt;TD&gt;25&lt;/TD&gt;&lt;TD&gt;1325536968&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;14:56:13&lt;/TD&gt;&lt;TD&gt;103.303&lt;/TD&gt;&lt;TD&gt;1326014939&lt;/TD&gt;&lt;TD&gt;17-Sep-13&lt;/TD&gt;&lt;TD&gt;13:14:35&lt;/TD&gt;&lt;TD&gt;105.244&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BW4&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;1325536968&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;14:56:13&lt;/TD&gt;&lt;TD&gt;103.303&lt;/TD&gt;&lt;TD&gt;1326017794&lt;/TD&gt;&lt;TD&gt;17-Sep-13&lt;/TD&gt;&lt;TD&gt;15:40:12&lt;/TD&gt;&lt;TD&gt;105.369&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BW4&lt;/TD&gt;&lt;TD&gt;25&lt;/TD&gt;&lt;TD&gt;1325536968&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;14:56:13&lt;/TD&gt;&lt;TD&gt;103.303&lt;/TD&gt;&lt;TD&gt;1326014939&lt;/TD&gt;&lt;TD&gt;17-Sep-13&lt;/TD&gt;&lt;TD&gt;13:14:35&lt;/TD&gt;&lt;TD&gt;105.244&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BW4&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;1325536968&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;14:56:13&lt;/TD&gt;&lt;TD&gt;103.303&lt;/TD&gt;&lt;TD&gt;1326017794&lt;/TD&gt;&lt;TD&gt;17-Sep-13&lt;/TD&gt;&lt;TD&gt;15:40:12&lt;/TD&gt;&lt;TD&gt;105.369&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BW4&lt;/TD&gt;&lt;TD&gt;25&lt;/TD&gt;&lt;TD&gt;1325536968&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;14:56:13&lt;/TD&gt;&lt;TD&gt;103.303&lt;/TD&gt;&lt;TD&gt;1326018222&lt;/TD&gt;&lt;TD&gt;17-Sep-13&lt;/TD&gt;&lt;TD&gt;16:04:21&lt;/TD&gt;&lt;TD&gt;105.244&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BW4&lt;/TD&gt;&lt;TD&gt;25&lt;/TD&gt;&lt;TD&gt;1325536968&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;14:56:13&lt;/TD&gt;&lt;TD&gt;103.303&lt;/TD&gt;&lt;TD&gt;1326014939&lt;/TD&gt;&lt;TD&gt;17-Sep-13&lt;/TD&gt;&lt;TD&gt;13:14:35&lt;/TD&gt;&lt;TD&gt;105.244&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BW4&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;1325536968&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;14:56:13&lt;/TD&gt;&lt;TD&gt;103.303&lt;/TD&gt;&lt;TD&gt;1326017794&lt;/TD&gt;&lt;TD&gt;17-Sep-13&lt;/TD&gt;&lt;TD&gt;15:40:12&lt;/TD&gt;&lt;TD&gt;105.369&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BW4&lt;/TD&gt;&lt;TD&gt;25&lt;/TD&gt;&lt;TD&gt;1325536968&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;14:56:13&lt;/TD&gt;&lt;TD&gt;103.303&lt;/TD&gt;&lt;TD&gt;1326018222&lt;/TD&gt;&lt;TD&gt;17-Sep-13&lt;/TD&gt;&lt;TD&gt;16:04:21&lt;/TD&gt;&lt;TD&gt;105.244&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BW4&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;1325536968&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;14:56:13&lt;/TD&gt;&lt;TD&gt;103.303&lt;/TD&gt;&lt;TD&gt;1326121154&lt;/TD&gt;&lt;TD&gt;18-Sep-13&lt;/TD&gt;&lt;TD&gt;10:12:59&lt;/TD&gt;&lt;TD&gt;105.369&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BW4&lt;/TD&gt;&lt;TD&gt;25&lt;/TD&gt;&lt;TD&gt;1325536968&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;14:56:13&lt;/TD&gt;&lt;TD&gt;103.303&lt;/TD&gt;&lt;TD&gt;1326014939&lt;/TD&gt;&lt;TD&gt;17-Sep-13&lt;/TD&gt;&lt;TD&gt;13:14:35&lt;/TD&gt;&lt;TD&gt;105.244&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BW4&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;1325536968&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;14:56:13&lt;/TD&gt;&lt;TD&gt;103.303&lt;/TD&gt;&lt;TD&gt;1326017794&lt;/TD&gt;&lt;TD&gt;17-Sep-13&lt;/TD&gt;&lt;TD&gt;15:40:12&lt;/TD&gt;&lt;TD&gt;105.369&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BW4&lt;/TD&gt;&lt;TD&gt;25&lt;/TD&gt;&lt;TD&gt;1325536968&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;14:56:13&lt;/TD&gt;&lt;TD&gt;103.303&lt;/TD&gt;&lt;TD&gt;1326018222&lt;/TD&gt;&lt;TD&gt;17-Sep-13&lt;/TD&gt;&lt;TD&gt;16:04:21&lt;/TD&gt;&lt;TD&gt;105.244&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BW4&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;1325536968&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;14:56:13&lt;/TD&gt;&lt;TD&gt;103.303&lt;/TD&gt;&lt;TD&gt;1326121154&lt;/TD&gt;&lt;TD&gt;18-Sep-13&lt;/TD&gt;&lt;TD&gt;10:12:59&lt;/TD&gt;&lt;TD&gt;105.369&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BW4&lt;/TD&gt;&lt;TD&gt;350&lt;/TD&gt;&lt;TD&gt;1325536968&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;14:56:13&lt;/TD&gt;&lt;TD&gt;103.303&lt;/TD&gt;&lt;TD&gt;1326123005&lt;/TD&gt;&lt;TD&gt;18-Sep-13&lt;/TD&gt;&lt;TD&gt;11:50:21&lt;/TD&gt;&lt;TD&gt;105.015&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BW4&lt;/TD&gt;&lt;TD&gt;25&lt;/TD&gt;&lt;TD&gt;1326341521&lt;/TD&gt;&lt;TD&gt;20-Sep-13&lt;/TD&gt;&lt;TD&gt;11:00:41&lt;/TD&gt;&lt;TD&gt;106.308&lt;/TD&gt;&lt;TD&gt;1326014939&lt;/TD&gt;&lt;TD&gt;17-Sep-13&lt;/TD&gt;&lt;TD&gt;13:14:35&lt;/TD&gt;&lt;TD&gt;105.244&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BW4&lt;/TD&gt;&lt;TD&gt;25&lt;/TD&gt;&lt;TD&gt;1326341521&lt;/TD&gt;&lt;TD&gt;20-Sep-13&lt;/TD&gt;&lt;TD&gt;11:00:41&lt;/TD&gt;&lt;TD&gt;106.308&lt;/TD&gt;&lt;TD&gt;1326017794&lt;/TD&gt;&lt;TD&gt;17-Sep-13&lt;/TD&gt;&lt;TD&gt;15:40:12&lt;/TD&gt;&lt;TD&gt;105.369&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BW4&lt;/TD&gt;&lt;TD&gt;25&lt;/TD&gt;&lt;TD&gt;1325536968&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;14:56:13&lt;/TD&gt;&lt;TD&gt;103.303&lt;/TD&gt;&lt;TD&gt;1326017794&lt;/TD&gt;&lt;TD&gt;17-Sep-13&lt;/TD&gt;&lt;TD&gt;15:40:12&lt;/TD&gt;&lt;TD&gt;105.369&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BW4&lt;/TD&gt;&lt;TD&gt;25&lt;/TD&gt;&lt;TD&gt;1325536968&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;14:56:13&lt;/TD&gt;&lt;TD&gt;103.303&lt;/TD&gt;&lt;TD&gt;1326018222&lt;/TD&gt;&lt;TD&gt;17-Sep-13&lt;/TD&gt;&lt;TD&gt;16:04:21&lt;/TD&gt;&lt;TD&gt;105.244&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BW4&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;1325536968&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;14:56:13&lt;/TD&gt;&lt;TD&gt;103.303&lt;/TD&gt;&lt;TD&gt;1326121154&lt;/TD&gt;&lt;TD&gt;18-Sep-13&lt;/TD&gt;&lt;TD&gt;10:12:59&lt;/TD&gt;&lt;TD&gt;105.369&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BW4&lt;/TD&gt;&lt;TD&gt;350&lt;/TD&gt;&lt;TD&gt;1325536968&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;14:56:13&lt;/TD&gt;&lt;TD&gt;103.303&lt;/TD&gt;&lt;TD&gt;1326123005&lt;/TD&gt;&lt;TD&gt;18-Sep-13&lt;/TD&gt;&lt;TD&gt;11:50:21&lt;/TD&gt;&lt;TD&gt;105.015&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BW4&lt;/TD&gt;&lt;TD&gt;25&lt;/TD&gt;&lt;TD&gt;1326341521&lt;/TD&gt;&lt;TD&gt;20-Sep-13&lt;/TD&gt;&lt;TD&gt;11:00:41&lt;/TD&gt;&lt;TD&gt;106.308&lt;/TD&gt;&lt;TD&gt;1326014939&lt;/TD&gt;&lt;TD&gt;17-Sep-13&lt;/TD&gt;&lt;TD&gt;13:14:35&lt;/TD&gt;&lt;TD&gt;105.244&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BW4&lt;/TD&gt;&lt;TD&gt;25&lt;/TD&gt;&lt;TD&gt;1326341521&lt;/TD&gt;&lt;TD&gt;20-Sep-13&lt;/TD&gt;&lt;TD&gt;11:00:41&lt;/TD&gt;&lt;TD&gt;106.308&lt;/TD&gt;&lt;TD&gt;1326017794&lt;/TD&gt;&lt;TD&gt;17-Sep-13&lt;/TD&gt;&lt;TD&gt;15:40:12&lt;/TD&gt;&lt;TD&gt;105.369&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BW4&lt;/TD&gt;&lt;TD&gt;25&lt;/TD&gt;&lt;TD&gt;1325536968&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;14:56:13&lt;/TD&gt;&lt;TD&gt;103.303&lt;/TD&gt;&lt;TD&gt;1326017794&lt;/TD&gt;&lt;TD&gt;17-Sep-13&lt;/TD&gt;&lt;TD&gt;15:40:12&lt;/TD&gt;&lt;TD&gt;105.369&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BW4&lt;/TD&gt;&lt;TD&gt;25&lt;/TD&gt;&lt;TD&gt;1325536968&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;14:56:13&lt;/TD&gt;&lt;TD&gt;103.303&lt;/TD&gt;&lt;TD&gt;1326018222&lt;/TD&gt;&lt;TD&gt;17-Sep-13&lt;/TD&gt;&lt;TD&gt;16:04:21&lt;/TD&gt;&lt;TD&gt;105.244&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BW4&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;1325536968&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;14:56:13&lt;/TD&gt;&lt;TD&gt;103.303&lt;/TD&gt;&lt;TD&gt;1326121154&lt;/TD&gt;&lt;TD&gt;18-Sep-13&lt;/TD&gt;&lt;TD&gt;10:12:59&lt;/TD&gt;&lt;TD&gt;105.369&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BW4&lt;/TD&gt;&lt;TD&gt;350&lt;/TD&gt;&lt;TD&gt;1325536968&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;14:56:13&lt;/TD&gt;&lt;TD&gt;103.303&lt;/TD&gt;&lt;TD&gt;1326123005&lt;/TD&gt;&lt;TD&gt;18-Sep-13&lt;/TD&gt;&lt;TD&gt;11:50:21&lt;/TD&gt;&lt;TD&gt;105.015&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BW4&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;1325536968&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;14:56:13&lt;/TD&gt;&lt;TD&gt;103.303&lt;/TD&gt;&lt;TD&gt;1326341522&lt;/TD&gt;&lt;TD&gt;20-Sep-13&lt;/TD&gt;&lt;TD&gt;11:00:41&lt;/TD&gt;&lt;TD&gt;106.308&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BY0&lt;/TD&gt;&lt;TD&gt;20&lt;/TD&gt;&lt;TD&gt;1325547689&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;16:51:56&lt;/TD&gt;&lt;TD&gt;$99.78&lt;/TD&gt;&lt;TD&gt;1325642219&lt;/TD&gt;&lt;TD&gt;13-Sep-13&lt;/TD&gt;&lt;TD&gt;11:01:07&lt;/TD&gt;&lt;TD&gt;100.25&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BY0&lt;/TD&gt;&lt;TD&gt;20&lt;/TD&gt;&lt;TD&gt;1325547689&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;16:51:56&lt;/TD&gt;&lt;TD&gt;$99.78&lt;/TD&gt;&lt;TD&gt;1325642219&lt;/TD&gt;&lt;TD&gt;13-Sep-13&lt;/TD&gt;&lt;TD&gt;11:01:07&lt;/TD&gt;&lt;TD&gt;100.25&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BY0&lt;/TD&gt;&lt;TD&gt;330&lt;/TD&gt;&lt;TD&gt;1325547689&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;16:51:56&lt;/TD&gt;&lt;TD&gt;$99.78&lt;/TD&gt;&lt;TD&gt;1325642259&lt;/TD&gt;&lt;TD&gt;13-Sep-13&lt;/TD&gt;&lt;TD&gt;11:03:05&lt;/TD&gt;&lt;TD&gt;100.44&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BY0&lt;/TD&gt;&lt;TD&gt;20&lt;/TD&gt;&lt;TD&gt;1327522086&lt;/TD&gt;&lt;TD&gt;2-Oct-13&lt;/TD&gt;&lt;TD&gt;11:07:37&lt;/TD&gt;&lt;TD&gt;101.117&lt;/TD&gt;&lt;TD&gt;1325642219&lt;/TD&gt;&lt;TD&gt;13-Sep-13&lt;/TD&gt;&lt;TD&gt;11:01:07&lt;/TD&gt;&lt;TD&gt;100.25&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BY0&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;1327522086&lt;/TD&gt;&lt;TD&gt;2-Oct-13&lt;/TD&gt;&lt;TD&gt;11:07:37&lt;/TD&gt;&lt;TD&gt;101.117&lt;/TD&gt;&lt;TD&gt;1325642259&lt;/TD&gt;&lt;TD&gt;13-Sep-13&lt;/TD&gt;&lt;TD&gt;11:03:05&lt;/TD&gt;&lt;TD&gt;100.44&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BY0&lt;/TD&gt;&lt;TD&gt;300&lt;/TD&gt;&lt;TD&gt;1325547689&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;16:51:56&lt;/TD&gt;&lt;TD&gt;$99.78&lt;/TD&gt;&lt;TD&gt;1325642259&lt;/TD&gt;&lt;TD&gt;13-Sep-13&lt;/TD&gt;&lt;TD&gt;11:03:05&lt;/TD&gt;&lt;TD&gt;100.44&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BY0&lt;/TD&gt;&lt;TD&gt;20&lt;/TD&gt;&lt;TD&gt;1327522086&lt;/TD&gt;&lt;TD&gt;2-Oct-13&lt;/TD&gt;&lt;TD&gt;11:07:37&lt;/TD&gt;&lt;TD&gt;101.117&lt;/TD&gt;&lt;TD&gt;1325642219&lt;/TD&gt;&lt;TD&gt;13-Sep-13&lt;/TD&gt;&lt;TD&gt;11:01:07&lt;/TD&gt;&lt;TD&gt;100.25&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BY0&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;1327522086&lt;/TD&gt;&lt;TD&gt;2-Oct-13&lt;/TD&gt;&lt;TD&gt;11:07:37&lt;/TD&gt;&lt;TD&gt;101.117&lt;/TD&gt;&lt;TD&gt;1325642259&lt;/TD&gt;&lt;TD&gt;13-Sep-13&lt;/TD&gt;&lt;TD&gt;11:03:05&lt;/TD&gt;&lt;TD&gt;100.44&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BY0&lt;/TD&gt;&lt;TD&gt;300&lt;/TD&gt;&lt;TD&gt;1325547689&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;16:51:56&lt;/TD&gt;&lt;TD&gt;$99.78&lt;/TD&gt;&lt;TD&gt;1325642259&lt;/TD&gt;&lt;TD&gt;13-Sep-13&lt;/TD&gt;&lt;TD&gt;11:03:05&lt;/TD&gt;&lt;TD&gt;100.44&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;010831BY0&lt;/TD&gt;&lt;TD&gt;50&lt;/TD&gt;&lt;TD&gt;1325547689&lt;/TD&gt;&lt;TD&gt;12-Sep-13&lt;/TD&gt;&lt;TD&gt;16:51:56&lt;/TD&gt;&lt;TD&gt;$99.78&lt;/TD&gt;&lt;TD&gt;1327632245&lt;/TD&gt;&lt;TD&gt;3-Oct-13&lt;/TD&gt;&lt;TD&gt;11:54:05&lt;/TD&gt;&lt;TD&gt;104.218&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;As you can see, it has many more observations than it should - some full duplicates of previous observations, some that are repeats of previous values on only the Buy or Sell side. I think the problem is somewhere in how I iterate through my hash table, but I have been unable to find the bug. Thank you for reading through and please let me know if you can figure out what I am doing wrong!&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 15 Nov 2017 16:35:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-Last-in-First-out-LIFO-Algorithm-Using-Hash/m-p/413730#M101296</guid>
      <dc:creator>jsmith94</dc:creator>
      <dc:date>2017-11-15T16:35:34Z</dc:date>
    </item>
    <item>
      <title>Re: How to create a Last-in First-out (LIFO) Algorithm Using Hash Tables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-Last-in-First-out-LIFO-Algorithm-Using-Hash/m-p/413795#M101312</link>
      <description>&lt;P&gt;You can use the same program I provided in your &lt;A href="https://communities.sas.com/t5/Base-SAS-Programming/Calculating-FIFO-profit-using-Hash-of-Hashes/m-p/413692#M101282" target="_self"&gt;Calculating FIFO Profit using Hash of Hashes&lt;/A&gt;.&amp;nbsp; And just like in that topic, I would suggest not using the hash-of-hashes approach.&amp;nbsp; Instead use a pair of hashes, one for a profile of each cusip, and the other to track stock lots.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I suspect these&amp;nbsp;revisions would be sufficient for LIFO&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Instead of&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#0000ff" face="SAS Monospace" size="2"&gt;&amp;nbsp; do&lt;/FONT&gt;&lt;FONT face="SAS Monospace" size="2"&gt; rc=ilots.setcur(key:cusip,&lt;EM&gt;&lt;STRONG&gt;key:&lt;/STRONG&gt;&lt;/EM&gt;&lt;/FONT&gt;&lt;EM&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="SAS Monospace" size="2"&gt;1&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/EM&gt;&lt;FONT face="SAS Monospace" size="2"&gt;) &lt;/FONT&gt;&lt;FONT color="#0000ff" face="SAS Monospace" size="2"&gt;by&lt;/FONT&gt; &lt;STRONG&gt;&lt;FONT color="#008080" face="SAS Monospace" size="2"&gt;0&lt;/FONT&gt;&lt;/STRONG&gt; &lt;FONT color="#0000ff" face="SAS Monospace" size="2"&gt;until&lt;/FONT&gt;&lt;FONT face="SAS Monospace" size="2"&gt;(total_shrs_to_sell=&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="SAS Monospace" size="2"&gt;0&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="SAS Monospace" size="2"&gt; or lot_cusip^=cusip or rc^=&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="SAS Monospace" size="2"&gt;0&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="SAS Monospace" size="2"&gt;);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;which&amp;nbsp;finds the oldest lot of stocks, you can use&lt;/P&gt;
&lt;P&gt;&lt;FONT color="#0000ff" face="SAS Monospace" size="2"&gt;&amp;nbsp; do&lt;/FONT&gt;&lt;FONT face="SAS Monospace" size="2"&gt; rc=ilots.setcur(key:cusip,&lt;EM&gt;&lt;STRONG&gt;key:n_buys&lt;/STRONG&gt;&lt;/EM&gt;) &lt;/FONT&gt;&lt;FONT color="#0000ff" face="SAS Monospace" size="2"&gt;by&lt;/FONT&gt; &lt;STRONG&gt;&lt;FONT color="#008080" face="SAS Monospace" size="2"&gt;0&lt;/FONT&gt;&lt;/STRONG&gt; &lt;FONT color="#0000ff" face="SAS Monospace" size="2"&gt;until&lt;/FONT&gt;&lt;FONT face="SAS Monospace" size="2"&gt;(total_shrs_to_sell=&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="SAS Monospace" size="2"&gt;0&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="SAS Monospace" size="2"&gt; or lot_cusip^=cusip or rc^=&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="SAS Monospace" size="2"&gt;0&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="SAS Monospace" size="2"&gt;);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;which finds the newest.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;At the bottom of the loop replace&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp; rc=ilots.next();&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;LI-WRAPPER&gt;&lt;/LI-WRAPPER&gt;&lt;/P&gt;
&lt;P&gt;with&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp; rc=ilots.prev();&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Also to accommodate&amp;nbsp;partial lot sales, then instead of&lt;/P&gt;
&lt;P&gt;&lt;FONT face="SAS Monospace" size="2"&gt;&amp;nbsp;&amp;nbsp;b_num=b_num+&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="SAS Monospace" size="2"&gt;.01&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="SAS Monospace" size="2"&gt;; &lt;/FONT&gt;&lt;FONT color="#008000" face="SAS Monospace" size="2"&gt;/*Create a "sublot" (=lot+.01) with remaining avaiable shrs*/&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;you can use&lt;/P&gt;
&lt;P&gt;&lt;FONT face="SAS Monospace" size="2"&gt;&amp;nbsp;&amp;nbsp; b_num=b_num-&lt;/FONT&gt;&lt;STRONG&gt;&lt;FONT color="#008080" face="SAS Monospace" size="2"&gt;.01&lt;/FONT&gt;&lt;/STRONG&gt;&lt;FONT face="SAS Monospace" size="2"&gt;; &lt;/FONT&gt;&lt;FONT color="#008000" face="SAS Monospace" size="2"&gt;/*Create a "sublot" (=lot-.01) with remaining avaiable shrs*/&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In the LIFO case, it will have the counterintuitive property of, say, LOT 3 having sublots 2.99, 2.98, etc.&amp;nbsp; But that seems relatively acceptable to maintain the same program structure.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Editted additional note:&amp;nbsp; Of course, if your dataset is small enough you can use the other program without any changes by pre-sorting the input dataset by descending date (it doesn't need to also be sorted by cusip).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 15 Nov 2017 21:06:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-Last-in-First-out-LIFO-Algorithm-Using-Hash/m-p/413795#M101312</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2017-11-15T21:06:15Z</dc:date>
    </item>
    <item>
      <title>Re: How to create a Last-in First-out (LIFO) Algorithm Using Hash Tables</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-Last-in-First-out-LIFO-Algorithm-Using-Hash/m-p/413845#M101328</link>
      <description>&lt;P&gt;Thank you so much! I had come up with solutions for FIFO (less efficient than yours and I wasn't confident about them) but I could not figure out LIFO. You've saved me a huge amount of time!&lt;/P&gt;</description>
      <pubDate>Wed, 15 Nov 2017 23:44:00 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-create-a-Last-in-First-out-LIFO-Algorithm-Using-Hash/m-p/413845#M101328</guid>
      <dc:creator>jsmith94</dc:creator>
      <dc:date>2017-11-15T23:44:00Z</dc:date>
    </item>
  </channel>
</rss>

