<?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 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/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>
    <dc:creator>jsmith94</dc:creator>
    <dc:date>2017-11-15T16:35:34Z</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>

