<?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: Difficult merge/join with huge datasets in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180594#M34481</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;The results generated by your suggestion are not correct, but thanks for responding.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;the new results only contain the rows that can be priced with the latest price for each ticker/date pair.&amp;nbsp; Events that occurred earlier than the latest price get omitted but should not be, because they have a valid price (before the event).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;TradeDate TradeTime Tickr Qty PriceTime Price&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;08/01/2013 14:20:00 MSFT 1420 11:59:00 11.59&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;08/01/2013 15:59:00 MSFT 1559 11:59:00 11.59&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;08/02/2013 15:21:00 MSFT 1521 15:20:00 15.2&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;08/01/2013 10:06:00 YHOO 1006 10:05:00 10.05&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;08/01/2013 14:21:00 YHOO 1421 10:05:00 10.05&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;08/01/2013 15:58:00 YHOO 1558 10:05:00 10.05&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;08/02/2013 15:27:00 YHOO 1527 15:25:00 15.25&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 29 Aug 2014 20:15:46 GMT</pubDate>
    <dc:creator>jdmarino</dc:creator>
    <dc:date>2014-08-29T20:15:46Z</dc:date>
    <item>
      <title>Difficult merge/join with huge datasets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180592#M34479</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;SPAN style="color: #000000;"&gt;I'm good with sql, but it's not the right tool for this job.&amp;nbsp; I have to connect execution quantities for stocks with their last known prices. (That is, I can partially join the tables on date and ticker, but I have to find the price from Prices that is the latest time before the Event's time.)&amp;nbsp;&amp;nbsp; Below is some sample code and a sql statement that works, but is too inefficent my large datasets.&amp;nbsp; I'm wondering if there is some tricky data step with merging that can do this better.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;data Events;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; format TradeDate mmddyys10. TradeTime time.;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; input TradeDate :anydtdte. TradeTime :anydttme. Ticker :$4.&amp;nbsp; Qty :best10.;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;cards;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;1Aug2013 10:00 MSFT 1000&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;1Aug2013 10:02 MSFT 1002&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;1Aug2013 14:20 MSFT 1420&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;1Aug2013 15:59 MSFT 1559&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;2Aug2013 09:31 MSFT 0931&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;2Aug2013 12:01 MSFT 1201&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;2Aug2013 15:20 MSFT 1520&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;2Aug2013 15:21 MSFT 1521&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;1Aug2013 10:00 YHOO 1000&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;1Aug2013 10:06 YHOO 1006&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;1Aug2013 14:21 YHOO 1421&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;1Aug2013 15:58 YHOO 1558&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;2Aug2013 09:30 YHOO 0930&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;2Aug2013 12:01 YHOO 1201&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;2Aug2013 15:20 YHOO 1520&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;2Aug2013 15:27 YHOO 1527&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;1Aug2013 10:00 AAPL 1000&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;1Aug2013 10:06 AAPL 1006&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;1Aug2013 14:21 AAPL 1421&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;1Aug2013 15:58 AAPL 1558&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;2Aug2013 09:30 AAPL 0930&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;2Aug2013 12:01 AAPL 1201&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;2Aug2013 15:20 AAPL 1520&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;2Aug2013 15:27 AAPL 1527&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;proc sort data=Events;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; by Ticker TradeDate TradeTime;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;data Prices;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; format TradeDate mmddyys10. TradeTime time.;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; input TradeDate :anydtdte. TradeTime :anydttme. Ticker :$4.&amp;nbsp; Price :best10.;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;cards;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;1Aug2013 09:30 MSFT 09.30&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;1Aug2013 10:01 MSFT 10.01&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;1Aug2013 10:02 MSFT 10.02&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;1Aug2013 11:59 MSFT 11.59&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;2Aug2013 09:30 MSFT 09.30&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;2Aug2013 10:01 MSFT 10.01&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;2Aug2013 15:18 MSFT 15.18&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;2Aug2013 15:19 MSFT 15.19&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;2Aug2013 15:20 MSFT 15.20&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;2Aug2013 15:21 MSFT 15.21&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;1Aug2013 10:01 YHOO 10.01&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;1Aug2013 10:05 YHOO 10.05&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;2Aug2013 09:28 YHOO 09.28&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;2Aug2013 09:29 YHOO 09.29&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;2Aug2013 11:00 YHOO 11.00&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;2Aug2013 15:25 YHOO 15.25&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;2Aug2013 16:00 YHOO 16.00&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;proc sort data=Prices;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; by Ticker TradeDate TradeTime;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;proc print data=Events;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;proc print data=Prices;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* too slow on big data */&lt;BR /&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;proc sql;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select a.*, b.TradeTime as PriceTime, b.Price&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; from Events a&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; join Prices b&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; on a.TradeDate = b.TradeDate&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and a.Ticker = b.Ticker&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and b.TradeTime &amp;lt; a.TradeTime&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; group by a.TradeDate, a.Ticker, a.TradeTime&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; having b.TradeTime = max( b.TradeTime)&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; order by a.Ticker, a.TradeDate, a.TradeTime;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Here are the results:&lt;/P&gt;&lt;DIV align="left"&gt;&lt;TABLE cellpadding="5" cellspacing="0" class="table" frame="box" rules="all" summary="Procedure SQL: Query Results"&gt;&lt;THEAD&gt;&lt;TR&gt;&lt;TH class="r b header" scope="col"&gt;TradeDate&lt;/TH&gt;&lt;TH class="r b header" scope="col"&gt;TradeTime&lt;/TH&gt;&lt;TH class="l b header" scope="col"&gt;Ticker&lt;/TH&gt;&lt;TH class="r b header" scope="col"&gt;Qty&lt;/TH&gt;&lt;TH class="r b header" scope="col"&gt;PriceTime&lt;/TH&gt;&lt;TH class="r b header" scope="col"&gt;Price&lt;/TH&gt;&lt;/TR&gt;&lt;/THEAD&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD class="r data"&gt;08/01/2013&lt;/TD&gt;&lt;TD class="r data"&gt;10:00:00&lt;/TD&gt;&lt;TD class="l data"&gt;MSFT&lt;/TD&gt;&lt;TD class="r data"&gt;1000&lt;/TD&gt;&lt;TD class="r data"&gt;9:30:00&lt;/TD&gt;&lt;TD class="r data"&gt;9.3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="r data"&gt;08/01/2013&lt;/TD&gt;&lt;TD class="r data"&gt;10:02:00&lt;/TD&gt;&lt;TD class="l data"&gt;MSFT&lt;/TD&gt;&lt;TD class="r data"&gt;1002&lt;/TD&gt;&lt;TD class="r data"&gt;10:01:00&lt;/TD&gt;&lt;TD class="r data"&gt;10.01&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="r data"&gt;08/01/2013&lt;/TD&gt;&lt;TD class="r data"&gt;14:20:00&lt;/TD&gt;&lt;TD class="l data"&gt;MSFT&lt;/TD&gt;&lt;TD class="r data"&gt;1420&lt;/TD&gt;&lt;TD class="r data"&gt;11:59:00&lt;/TD&gt;&lt;TD class="r data"&gt;11.59&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="r data"&gt;08/01/2013&lt;/TD&gt;&lt;TD class="r data"&gt;15:59:00&lt;/TD&gt;&lt;TD class="l data"&gt;MSFT&lt;/TD&gt;&lt;TD class="r data"&gt;1559&lt;/TD&gt;&lt;TD class="r data"&gt;11:59:00&lt;/TD&gt;&lt;TD class="r data"&gt;11.59&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="r data"&gt;08/02/2013&lt;/TD&gt;&lt;TD class="r data"&gt;9:31:00&lt;/TD&gt;&lt;TD class="l data"&gt;MSFT&lt;/TD&gt;&lt;TD class="r data"&gt;931&lt;/TD&gt;&lt;TD class="r data"&gt;9:30:00&lt;/TD&gt;&lt;TD class="r data"&gt;9.3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="r data"&gt;08/02/2013&lt;/TD&gt;&lt;TD class="r data"&gt;12:01:00&lt;/TD&gt;&lt;TD class="l data"&gt;MSFT&lt;/TD&gt;&lt;TD class="r data"&gt;1201&lt;/TD&gt;&lt;TD class="r data"&gt;10:01:00&lt;/TD&gt;&lt;TD class="r data"&gt;10.01&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="r data"&gt;08/02/2013&lt;/TD&gt;&lt;TD class="r data"&gt;15:20:00&lt;/TD&gt;&lt;TD class="l data"&gt;MSFT&lt;/TD&gt;&lt;TD class="r data"&gt;1520&lt;/TD&gt;&lt;TD class="r data"&gt;15:19:00&lt;/TD&gt;&lt;TD class="r data"&gt;15.19&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="r data"&gt;08/02/2013&lt;/TD&gt;&lt;TD class="r data"&gt;15:21:00&lt;/TD&gt;&lt;TD class="l data"&gt;MSFT&lt;/TD&gt;&lt;TD class="r data"&gt;1521&lt;/TD&gt;&lt;TD class="r data"&gt;15:20:00&lt;/TD&gt;&lt;TD class="r data"&gt;15.2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="r data"&gt;08/01/2013&lt;/TD&gt;&lt;TD class="r data"&gt;10:06:00&lt;/TD&gt;&lt;TD class="l data"&gt;YHOO&lt;/TD&gt;&lt;TD class="r data"&gt;1006&lt;/TD&gt;&lt;TD class="r data"&gt;10:05:00&lt;/TD&gt;&lt;TD class="r data"&gt;10.05&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="r data"&gt;08/01/2013&lt;/TD&gt;&lt;TD class="r data"&gt;14:21:00&lt;/TD&gt;&lt;TD class="l data"&gt;YHOO&lt;/TD&gt;&lt;TD class="r data"&gt;1421&lt;/TD&gt;&lt;TD class="r data"&gt;10:05:00&lt;/TD&gt;&lt;TD class="r data"&gt;10.05&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="r data"&gt;08/01/2013&lt;/TD&gt;&lt;TD class="r data"&gt;15:58:00&lt;/TD&gt;&lt;TD class="l data"&gt;YHOO&lt;/TD&gt;&lt;TD class="r data"&gt;1558&lt;/TD&gt;&lt;TD class="r data"&gt;10:05:00&lt;/TD&gt;&lt;TD class="r data"&gt;10.05&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="r data"&gt;08/02/2013&lt;/TD&gt;&lt;TD class="r data"&gt;9:30:00&lt;/TD&gt;&lt;TD class="l data"&gt;YHOO&lt;/TD&gt;&lt;TD class="r data"&gt;930&lt;/TD&gt;&lt;TD class="r data"&gt;9:29:00&lt;/TD&gt;&lt;TD class="r data"&gt;9.29&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="r data"&gt;08/02/2013&lt;/TD&gt;&lt;TD class="r data"&gt;12:01:00&lt;/TD&gt;&lt;TD class="l data"&gt;YHOO&lt;/TD&gt;&lt;TD class="r data"&gt;1201&lt;/TD&gt;&lt;TD class="r data"&gt;11:00:00&lt;/TD&gt;&lt;TD class="r data"&gt;11&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="r data"&gt;08/02/2013&lt;/TD&gt;&lt;TD class="r data"&gt;15:20:00&lt;/TD&gt;&lt;TD class="l data"&gt;YHOO&lt;/TD&gt;&lt;TD class="r data"&gt;1520&lt;/TD&gt;&lt;TD class="r data"&gt;11:00:00&lt;/TD&gt;&lt;TD class="r data"&gt;11&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD class="r data"&gt;08/02/2013&lt;/TD&gt;&lt;TD class="r data"&gt;15:27:00&lt;/TD&gt;&lt;TD class="l data"&gt;YHOO&lt;/TD&gt;&lt;TD class="r data"&gt;1527&lt;/TD&gt;&lt;TD class="r data"&gt;15:25:00&lt;/TD&gt;&lt;TD class="r data"&gt;15.25&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 29 Aug 2014 17:44:41 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180592#M34479</guid>
      <dc:creator>jdmarino</dc:creator>
      <dc:date>2014-08-29T17:44:41Z</dc:date>
    </item>
    <item>
      <title>Re: Difficult merge/join with huge datasets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180593#M34480</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Hope small modification will generate the desired results. Remove a.TradeTime from group by clause.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;instead of&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;group by a.TradeDate, a.Ticker, a.TradeTime&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;try this&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;group by a.TradeDate, a.Ticker&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 29 Aug 2014 18:51:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180593#M34480</guid>
      <dc:creator>stat_sas</dc:creator>
      <dc:date>2014-08-29T18:51:17Z</dc:date>
    </item>
    <item>
      <title>Re: Difficult merge/join with huge datasets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180594#M34481</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;The results generated by your suggestion are not correct, but thanks for responding.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;the new results only contain the rows that can be priced with the latest price for each ticker/date pair.&amp;nbsp; Events that occurred earlier than the latest price get omitted but should not be, because they have a valid price (before the event).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;TradeDate TradeTime Tickr Qty PriceTime Price&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;08/01/2013 14:20:00 MSFT 1420 11:59:00 11.59&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;08/01/2013 15:59:00 MSFT 1559 11:59:00 11.59&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;08/02/2013 15:21:00 MSFT 1521 15:20:00 15.2&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;08/01/2013 10:06:00 YHOO 1006 10:05:00 10.05&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;08/01/2013 14:21:00 YHOO 1421 10:05:00 10.05&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;08/01/2013 15:58:00 YHOO 1558 10:05:00 10.05&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: courier new,courier;"&gt;08/02/2013 15:27:00 YHOO 1527 15:25:00 15.25&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 29 Aug 2014 20:15:46 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180594#M34481</guid>
      <dc:creator>jdmarino</dc:creator>
      <dc:date>2014-08-29T20:15:46Z</dc:date>
    </item>
    <item>
      <title>Re: Difficult merge/join with huge datasets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180595#M34482</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;There are lot options to optimize performance. Most of then balancing between resources.&lt;BR /&gt;You did not mention those.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;For a datastep merge approach using balance line (ordered access with point direct access)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%let dsid = %sysfunc(open(prices));&lt;/P&gt;&lt;P&gt;%let pr_nobs =%sysfunc(attrn(&amp;amp;dsid,NOBS));&lt;/P&gt;&lt;P&gt;%let rc = %sysfunc(close(&amp;amp;dsid));&lt;/P&gt;&lt;P&gt;%put prices has &amp;amp;pr_nobs observations;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;/* using assumption oredered events - prices */&lt;/P&gt;&lt;P&gt;data results;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set Events nobs=evn_nobs ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; Retain eventlk 1&amp;nbsp; ; &lt;/P&gt;&lt;P&gt;&amp;nbsp; check=1 ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do while (eventlk &amp;lt; &amp;amp;pr_nobs &amp;amp; check ) ;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; set Prices (rename=(Ticker=pTicker TradeDate=PriceDate TradeTime=Pricetime ) ) point=eventlk&amp;nbsp; end=endprc ;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; if ( Ticker &amp;gt; PTicker | ( Ticker = PTicker &amp;amp; TradeDate &amp;gt; PriceDate) |( Ticker = PTicker &amp;amp; TradeDate = PriceDate &amp;amp; TradeTime &amp;gt; Pricetime ) ) then eventlk=eventlk+1 ; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; else check=0; &lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if not endprc then eventlk=eventlk-1 ; /* one back that has passed set equation */ &lt;/P&gt;&lt;P&gt;&amp;nbsp; set Prices (rename=(Ticker=pTicker TradeDate=PriceDate TradeTime=Pricetime ) ) point=eventlk&amp;nbsp; end=endprc ;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; IF ( Ticker=PTicker &amp;amp; TradeDate = PriceDate) then output; /* */&lt;/P&gt;&lt;P&gt; run;&amp;nbsp; &lt;/P&gt;&lt;P&gt;proc print; &lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 29 Aug 2014 20:26:56 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180595#M34482</guid>
      <dc:creator>jakarman</dc:creator>
      <dc:date>2014-08-29T20:26:56Z</dc:date>
    </item>
    <item>
      <title>Re: Difficult merge/join with huge datasets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180596#M34483</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;This is the kind of answer I was hoping for -- there are techniques here that are new to me.&amp;nbsp; The conditional use of Set, pluse the point= option is something I need to learn about.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'll give this a try (next week; I'm burned out) and report back.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks for the reply.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 29 Aug 2014 20:42:16 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180596#M34483</guid>
      <dc:creator>jdmarino</dc:creator>
      <dc:date>2014-08-29T20:42:16Z</dc:date>
    </item>
    <item>
      <title>Re: Difficult merge/join with huge datasets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180597#M34484</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;This is a Hash solution, suppose 'prices' is small enough to fit into your memory, and 'prices' does not need to be presorted.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;STRONG style="color: navy; background: white; font-family: 'Courier New';"&gt;data&lt;/STRONG&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt; want_hash;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="font-family: 'Courier New'; color: blue; background: white;"&gt;if&lt;/SPAN&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt; _n_=&lt;/SPAN&gt;&lt;STRONG style="color: teal; background: white; font-family: 'Courier New';"&gt;1&lt;/STRONG&gt; &lt;SPAN style="font-family: 'Courier New'; color: blue; background: white;"&gt;then&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="font-family: 'Courier New'; color: blue; background: white;"&gt;do&lt;/SPAN&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&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; &lt;SPAN style="font-family: 'Courier New'; color: blue; background: white;"&gt;if&lt;/SPAN&gt; &lt;STRONG style="color: teal; background: white; font-family: 'Courier New';"&gt;0&lt;/STRONG&gt; &lt;SPAN style="font-family: 'Courier New'; color: blue; background: white;"&gt;then&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&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; &lt;SPAN style="font-family: 'Courier New'; color: blue; background: white;"&gt;set&lt;/SPAN&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt; prices (rename=(tradetime=pricetime));&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&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; &lt;SPAN style="font-family: 'Courier New'; color: blue; background: white;"&gt;declare&lt;/SPAN&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt; hash h(dataset:&lt;/SPAN&gt;&lt;SPAN style="font-family: 'Courier New'; color: purple; background: white;"&gt;'prices (rename=(tradetime=pricetime))'&lt;/SPAN&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt;, multidata:&lt;/SPAN&gt;&lt;SPAN style="font-family: 'Courier New'; color: purple; background: white;"&gt;'y'&lt;/SPAN&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt;);&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&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; h.definekey(&lt;/SPAN&gt;&lt;SPAN style="font-family: 'Courier New'; color: purple; background: white;"&gt;'ticker'&lt;/SPAN&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt;,&lt;/SPAN&gt;&lt;SPAN style="font-family: 'Courier New'; color: purple; background: white;"&gt;'tradedate'&lt;/SPAN&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt;);&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; h.definedata(all:&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&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; &lt;SPAN style="font-family: 'Courier New'; color: purple; background: white;"&gt;'y'&lt;/SPAN&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt;);&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&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; h.definedone();&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="font-family: 'Courier New'; color: blue; background: white;"&gt;end&lt;/SPAN&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="font-family: 'Courier New'; color: blue; background: white;"&gt;set&lt;/SPAN&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt; Events;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="font-family: 'Courier New'; color: blue; background: white;"&gt;do&lt;/SPAN&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt; rc=h.find() &lt;/SPAN&gt;&lt;SPAN style="font-family: 'Courier New'; color: blue; background: white;"&gt;by&lt;/SPAN&gt; &lt;STRONG style="color: teal; background: white; font-family: 'Courier New';"&gt;0&lt;/STRONG&gt; &lt;SPAN style="font-family: 'Courier New'; color: blue; background: white;"&gt;while&lt;/SPAN&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt; (rc=&lt;/SPAN&gt;&lt;STRONG style="color: teal; background: white; font-family: 'Courier New';"&gt;0&lt;/STRONG&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt;);&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="font-family: 'Courier New'; color: blue; background: white;"&gt;if&lt;/SPAN&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt; pricetime &amp;lt; tradetime &lt;/SPAN&gt;&lt;SPAN style="font-family: 'Courier New'; color: blue; background: white;"&gt;then&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&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; &lt;SPAN style="font-family: 'Courier New'; color: blue; background: white;"&gt;do&lt;/SPAN&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&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; _f=&lt;/SPAN&gt;&lt;STRONG style="color: teal; background: white; font-family: 'Courier New';"&gt;1&lt;/STRONG&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&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; &lt;SPAN style="font-family: 'Courier New'; color: blue; background: white;"&gt;if&lt;/SPAN&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt; pricetime &amp;gt; _t &lt;/SPAN&gt;&lt;SPAN style="font-family: 'Courier New'; color: blue; background: white;"&gt;then&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="font-family: 'Courier New'; color: blue; background: white;"&gt;do&lt;/SPAN&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _t=pricetime;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _P=price;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="font-family: 'Courier New'; color: blue; background: white;"&gt;end&lt;/SPAN&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&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; &lt;SPAN style="font-family: 'Courier New'; color: blue; background: white;"&gt;end&lt;/SPAN&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; rc=h.find_next();&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="font-family: 'Courier New'; color: blue; background: white;"&gt;end&lt;/SPAN&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; price=_p;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pricetime=_t;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="font-family: 'Courier New'; color: blue; background: white;"&gt;if&lt;/SPAN&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt; _f=&lt;/SPAN&gt;&lt;STRONG style="color: teal; background: white; font-family: 'Courier New';"&gt;1&lt;/STRONG&gt; &lt;SPAN style="font-family: 'Courier New'; color: blue; background: white;"&gt;then&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="font-family: 'Courier New'; color: blue; background: white;"&gt;output&lt;/SPAN&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="font-family: 'Courier New'; color: blue; background: white;"&gt;drop&lt;/SPAN&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt; rc _:;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="color: navy; background: white; font-family: 'Courier New';"&gt;run&lt;/STRONG&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt;&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'Courier New'; color: black; background: white;"&gt;Haikuo&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 30 Aug 2014 00:54:42 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180597#M34484</guid>
      <dc:creator>Haikuo</dc:creator>
      <dc:date>2014-08-30T00:54:42Z</dc:date>
    </item>
    <item>
      <title>Re: Difficult merge/join with huge datasets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180598#M34485</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;How about this :&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;data Events;
&amp;nbsp;&amp;nbsp;&amp;nbsp; format TradeDate mmddyys10. TradeTime time.;
&amp;nbsp;&amp;nbsp;&amp;nbsp; input TradeDate :anydtdte. TradeTime :anydttme. Ticker :$4.&amp;nbsp; Qty :best10.;
cards;
1Aug2013 10:00 MSFT 1000
1Aug2013 10:02 MSFT 1002
1Aug2013 14:20 MSFT 1420
1Aug2013 15:59 MSFT 1559
2Aug2013 09:31 MSFT 0931
2Aug2013 12:01 MSFT 1201
2Aug2013 15:20 MSFT 1520
2Aug2013 15:21 MSFT 1521
1Aug2013 10:00 YHOO 1000
1Aug2013 10:06 YHOO 1006
1Aug2013 14:21 YHOO 1421
1Aug2013 15:58 YHOO 1558
2Aug2013 09:30 YHOO 0930
2Aug2013 12:01 YHOO 1201
2Aug2013 15:20 YHOO 1520
2Aug2013 15:27 YHOO 1527
1Aug2013 10:00 AAPL 1000
1Aug2013 10:06 AAPL 1006
1Aug2013 14:21 AAPL 1421
1Aug2013 15:58 AAPL 1558
2Aug2013 09:30 AAPL 0930
2Aug2013 12:01 AAPL 1201
2Aug2013 15:20 AAPL 1520
2Aug2013 15:27 AAPL 1527
;
&amp;nbsp;&amp;nbsp;&amp;nbsp; run;
proc sort data=Events;
&amp;nbsp;&amp;nbsp;&amp;nbsp; by Ticker TradeDate TradeTime;
run;
 
data Prices;
&amp;nbsp;&amp;nbsp;&amp;nbsp; format TradeDate mmddyys10. TradeTime time.;
&amp;nbsp;&amp;nbsp;&amp;nbsp; input TradeDate :anydtdte. TradeTime :anydttme. Ticker :$4.&amp;nbsp; Price :best10.;
cards;
1Aug2013 09:30 MSFT 09.30
1Aug2013 10:01 MSFT 10.01
1Aug2013 10:02 MSFT 10.02
1Aug2013 11:59 MSFT 11.59
2Aug2013 09:30 MSFT 09.30
2Aug2013 10:01 MSFT 10.01
2Aug2013 15:18 MSFT 15.18
2Aug2013 15:19 MSFT 15.19
2Aug2013 15:20 MSFT 15.20
2Aug2013 15:21 MSFT 15.21
1Aug2013 10:01 YHOO 10.01
1Aug2013 10:05 YHOO 10.05
2Aug2013 09:28 YHOO 09.28
2Aug2013 09:29 YHOO 09.29
2Aug2013 11:00 YHOO 11.00
2Aug2013 15:25 YHOO 15.25
2Aug2013 16:00 YHOO 16.00
;
&amp;nbsp;&amp;nbsp;&amp;nbsp; run;
proc sort data=Prices;
&amp;nbsp;&amp;nbsp;&amp;nbsp; by Ticker TradeDate TradeTime;
run;

data want(drop=_price);
 set Events Prices(rename=(price=_price))&amp;nbsp; ;
 by Ticker TradeDate TradeTime ;
 retain price;
 if first.Ticker then call missing(price);
 if not missing(_price) then price=_price;
 if not missing(Qty) and not missing(price);
run;

&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Xia Keshan&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 30 Aug 2014 12:04:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180598#M34485</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2014-08-30T12:04:45Z</dc:date>
    </item>
    <item>
      <title>Re: Difficult merge/join with huge datasets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180599#M34486</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;It's good that you posted this idea for future reference.&amp;nbsp; As it happens, my Prices data is much bigger than my Events data, so this probably won't work for me.&amp;nbsp; I can break the problem down into chunks (the smallest being a ticker-date), but extracting the chunks may be time-consuming, given that I'd have to wrap a loop around it.&amp;nbsp; It's worth a test, however.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 30 Aug 2014 14:18:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180599#M34486</guid>
      <dc:creator>jdmarino</dc:creator>
      <dc:date>2014-08-30T14:18:13Z</dc:date>
    </item>
    <item>
      <title>Re: Difficult merge/join with huge datasets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180600#M34487</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;This is very interesting because it's so direct.&amp;nbsp; My data is actually not sorted, but I built an index on (Ticker TradeDate TradeTime) on each, so I think the BY statement will still work.&amp;nbsp; And I surely need to change the first IF to include TradeDate, like this&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;if first.Ticker &lt;SPAN style="color: #000000;"&gt;&lt;STRONG&gt;or first.TradeDate&lt;/STRONG&gt;&lt;/SPAN&gt; then call missing(price);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks for the reply; I'm excited to try this.&amp;nbsp; (That should be obvious because I'm replying on a holiday weekend about a work-related problem.)&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 30 Aug 2014 14:27:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180600#M34487</guid>
      <dc:creator>jdmarino</dc:creator>
      <dc:date>2014-08-30T14:27:45Z</dc:date>
    </item>
    <item>
      <title>Re: Difficult merge/join with huge datasets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180601#M34488</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;jdmarino can you give more details on your dataset-sizing SAS version and your computer resource limitations (memory cpu IO/dasd) ?&lt;BR /&gt; Indexing can work but has the advantage of additional IO (caused by random IO). IO is often the most delaying factor. Even when you an index it can be more efficient to process it sequential.&lt;BR /&gt; Today's computers are not having the limitations of several years back. The hash approach could be the most effective one when the memory (several Gb) is there.&amp;nbsp; &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 30 Aug 2014 14:36:47 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180601#M34488</guid>
      <dc:creator>jakarman</dc:creator>
      <dc:date>2014-08-30T14:36:47Z</dc:date>
    </item>
    <item>
      <title>Re: Difficult merge/join with huge datasets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180602#M34489</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I haven't dived into your problem. But just want to hint that building an index for BY processing is rarely good for performance. Many times it's more efficient to sort the whole table instead. Pls test both scenarios an get back with your results.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 01 Sep 2014 06:41:04 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180602#M34489</guid>
      <dc:creator>LinusH</dc:creator>
      <dc:date>2014-09-01T06:41:04Z</dc:date>
    </item>
    <item>
      <title>Re: Difficult merge/join with huge datasets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180603#M34490</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;My original SQL version took 5 hours.&lt;/P&gt;&lt;P&gt;KSharp's SET-BY interleaving took &amp;lt; 1 minute (after a 7 minute sort).&lt;/P&gt;&lt;P&gt;I haven't tried Jaap's method, mostly because it seems to me like a manual version of KSharp's.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am trying Hai.Kuo's hash method, but running out of memory, and I don't know why.&amp;nbsp; The dataset is 7G on my disk, but I have 24G of RAM.&amp;nbsp; This is the error:&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;ERROR: Hash object added 16252912 items when memory failure occurred.&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;FATAL: Insufficient memory to execute DATA step program. Aborted during the EXECUTION phase.&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;ERROR: The SAS System stopped processing this step because of insufficient memory.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Proc options group=memory reports:&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;Group=MEMORY&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;SORTSIZE=268435456&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Size parameter for sort&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;SUMSIZE=0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Upper limit for data-dependent memory usage during summarization&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;MAXMEMQUERY=0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Maximum amount of memory returned when inquiring as to available space&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;MEMBLKSZ=16777216 Size of memory blocks allocated to support MEMLIB and MEMCACHE options.&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;MEMMAXSZ=2147483648&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Maximum amount of memory allocated to support MEMLIB and MEMCACHE options.&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;LOADMEMSIZE=0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Suggested memory limit for loaded SAS executables&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;MEMSIZE=2147483648&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Specifies the limit on the total amount of memory to be used by the SAS System&lt;/P&gt;&lt;P style="padding-left: 30px;"&gt;REALMEMSIZE=0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Limit on the total amount of real memory to be used by the SAS System N&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I set "-MEMSIZE 19G" in my sasv9.cfg file.&amp;nbsp; Any ideas why I'm not using all the physical memory?&lt;/P&gt;&lt;P&gt;I have 64-bit SAS 9.3 (TS1M1) installed on a Windows 7 machine.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;FYI: I don't expect the hash method to be efficient because I have only 100 keys (50 tickers x 2 dates) in my real data.&amp;nbsp; That means for each key I'll be looping/scanning an average of 80,000 (16,000,000 items / 100 keys / 2) elements to find the one I want for each row in Events.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 04 Sep 2014 13:06:20 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180603#M34490</guid>
      <dc:creator>jdmarino</dc:creator>
      <dc:date>2014-09-04T13:06:20Z</dc:date>
    </item>
    <item>
      <title>Re: Difficult merge/join with huge datasets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180604#M34491</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;John you are telling You have set 19Gb for the memsize counting the digits I am seeing 2Gb. For sorting you are having 256Mb a common default value.&lt;BR /&gt;Setting it to higher values will improve processing performance by avoiding IO. But why is your setting of memsize a fail?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Which sasv9.config did you change and is that one really used? Not overwritten by another?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The hashing is using a b-tree keys search. Very popular as of NO-SQL should perform well. The number of keys can be a problem needing some additional tuning.&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp; &lt;BR /&gt; &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 04 Sep 2014 13:24:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180604#M34491</guid>
      <dc:creator>jakarman</dc:creator>
      <dc:date>2014-09-04T13:24:03Z</dc:date>
    </item>
    <item>
      <title>Re: Difficult merge/join with huge datasets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180605#M34492</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&amp;gt;&amp;gt; Why is memsize a fail?&lt;/P&gt;&lt;P&gt;I don't know.&amp;nbsp; I was hoping you did.&lt;/P&gt;&lt;P&gt;Another fail: SORTSIZE.&amp;nbsp; In my .cfg file I have it set to 19G.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Does one need admin rights on a Windows machine to set these params?&amp;nbsp; I don't have admin rights on this machine.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 04 Sep 2014 14:10:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180605#M34492</guid>
      <dc:creator>jdmarino</dc:creator>
      <dc:date>2014-09-04T14:10:37Z</dc:date>
    </item>
    <item>
      <title>Re: Difficult merge/join with huge datasets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180606#M34493</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Well, I figured out the failure: I added my options to the top of the .cfg file, but they were being reset (to the lower values) at the bottom of the file!&amp;nbsp; The hash version is running now, and clearly using nearly all the RAM.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 04 Sep 2014 14:23:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180606#M34493</guid>
      <dc:creator>jdmarino</dc:creator>
      <dc:date>2014-09-04T14:23:19Z</dc:date>
    </item>
    <item>
      <title>Re: Difficult merge/join with huge datasets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180607#M34494</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;For this kind of failures you the reason there is a usermods_config file specified. All usermodifications should go in that one, not in the default one supplied by SAS.&lt;BR /&gt;This is a bad habit seen by oldies of the V8/V6 time where the default installation did not support that. A technical guy could add that functionality. &lt;/P&gt;&lt;P&gt;With 9.3 you can included/nest config files and it setup that way.&amp;nbsp; &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 04 Sep 2014 14:36:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180607#M34494</guid>
      <dc:creator>jakarman</dc:creator>
      <dc:date>2014-09-04T14:36:11Z</dc:date>
    </item>
    <item>
      <title>Re: Difficult merge/join with huge datasets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180608#M34495</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Here are the timing results based on my real dataset:&lt;/P&gt;&lt;P&gt;SQL method: 5 hours&lt;/P&gt;&lt;P&gt;SET-BY method: 55 seconds&amp;nbsp; :smileygrin:&lt;/P&gt;&lt;P&gt;SET-POINT method: untried&amp;nbsp; (It seems to me to replicate SET-BY, but requires more coding)&lt;/P&gt;&lt;P&gt;HASH method: 2 hours&amp;nbsp; (too few keys compared to overall data causes near-linear searching)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I learned some new tricks.&amp;nbsp; Thanks to all who contributed ideas. &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 04 Sep 2014 17:41:52 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180608#M34495</guid>
      <dc:creator>jdmarino</dc:creator>
      <dc:date>2014-09-04T17:41:52Z</dc:date>
    </item>
    <item>
      <title>Re: Difficult merge/join with huge datasets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180609#M34496</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Since it is sorted by&amp;nbsp; ' Ticker TradeDate TradeTime;', "if first.TradeDate" will contain 'if first.Ticker', so 'if first.TradeDate then call missing(price);' should do. One less condition to check may save you a few secs.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Haikuo &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 04 Sep 2014 19:07:55 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180609#M34496</guid>
      <dc:creator>Haikuo</dc:creator>
      <dc:date>2014-09-04T19:07:55Z</dc:date>
    </item>
    <item>
      <title>Re: Difficult merge/join with huge datasets</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180610#M34497</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks for the feedback! It is good to know that old-school data step still rocks if you know how to swing. Also, to my surprise, Proc Sort takes way less time than I expected. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Haikuo &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 04 Sep 2014 19:11:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Difficult-merge-join-with-huge-datasets/m-p/180610#M34497</guid>
      <dc:creator>Haikuo</dc:creator>
      <dc:date>2014-09-04T19:11:10Z</dc:date>
    </item>
  </channel>
</rss>

