<?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: What would be hash equivalent for this sql join? in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/What-would-be-hash-equivalent-for-this-sql-join/m-p/87285#M18642</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;A __default_attr="2746" __jive_macro_name="user" class="jive_macro jive_macro_user" data-objecttype="3" href="https://communities.sas.com/"&gt;&lt;/A&gt;: I'll test it as soon as I get a chance this weekend&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;A __default_attr="5068" __jive_macro_name="user" class="jive_macro jive_macro_user" data-objecttype="3" href="https://communities.sas.com/"&gt;&lt;/A&gt;: Beauty is in the eye of the beholder!&amp;nbsp; From two hours (for the proc sql version), to just over 4 minutes for your version, is extremely pretty to me!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;An extra credit question for both approaches.&amp;nbsp; What if I need to expand the task to accommodate multiple groups and need the match to be group specific (i.e., in the sql code had an extra line: on gorup1=group2)?&amp;nbsp; e.g.:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;data have1;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp; informat dt1 anydtdtm19.;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp; format dt1 datetime19.;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp; input group1 recnum1 dt1;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp; cards;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;1 1 10/01/2012:00:00:10&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;1 2 10/01/2012:00:00:30&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;1 3 10/01/2012:00:00:50&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;1 4 10/01/2012:00:01:10&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;1 5 10/01/2012:00:01:30&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;2 1 10/01/2012:00:00:11&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;2 2 10/01/2012:00:00:31&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;2 3 10/01/2012:00:00:51&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;2 4 10/01/2012:00:01:11&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;2 5 10/01/2012:00:01:31&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;3 1 10/01/2012:00:00:12&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;3 2 10/01/2012:00:00:32&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;3 3 10/01/2012:00:00:52&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;3 4 10/01/2012:00:01:12&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;3 5 10/01/2012:00:01:32&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;data have2;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp; informat dt2 anydtdtm19.;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp; format dt2 datetime19.;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp; input group2 recnum2 dt2;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp; cards;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;1 1 10/01/2012:00:00:15&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;1 2 10/01/2012:00:00:16&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;1 3 10/01/2012:00:00:35&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;1 4 10/01/2012:00:00:37&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;1 5 10/01/2012:00:00:55&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;1 6 10/01/2012:00:01:18&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;1 7 10/01/2012:00:01:45&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;2 1 10/01/2012:00:00:16&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;2 2 10/01/2012:00:00:17&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;2 3 10/01/2012:00:00:36&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;2 4 10/01/2012:00:00:38&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;2 5 10/01/2012:00:00:56&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;2 6 10/01/2012:00:01:19&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;2 7 10/01/2012:00:01:46&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;3 1 10/01/2012:00:00:15&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;3 2 10/01/2012:00:00:16&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;3 3 10/01/2012:00:00:35&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;3 4 10/01/2012:00:00:37&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;3 5 10/01/2012:00:00:55&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;3 6 10/01/2012:00:01:18&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;3 7 10/01/2012:00:01:45&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sat, 01 Dec 2012 02:29:44 GMT</pubDate>
    <dc:creator>art297</dc:creator>
    <dc:date>2012-12-01T02:29:44Z</dc:date>
    <item>
      <title>What would be hash equivalent for this sql join?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/What-would-be-hash-equivalent-for-this-sql-join/m-p/87281#M18638</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;The following sql join does what I want, but I'd like to see what the hash equivalent in a data step would look like:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data have1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; informat dt1 anydtdtm19.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; format dt1 datetime19.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; input recnum1 dt1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; cards;&lt;/P&gt;&lt;P&gt;1 10/01/2012:00:00:10&lt;/P&gt;&lt;P&gt;2 10/01/2012:00:00:30&lt;/P&gt;&lt;P&gt;3 10/01/2012:00:00:50&lt;/P&gt;&lt;P&gt;4 10/01/2012:00:01:10&lt;/P&gt;&lt;P&gt;5 10/01/2012:00:01:30&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data have2;&lt;/P&gt;&lt;P&gt;&amp;nbsp; informat dt2 anydtdtm19.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; format dt2 datetime19.;&lt;/P&gt;&lt;P&gt;&amp;nbsp; input recnum2 dt2;&lt;/P&gt;&lt;P&gt;&amp;nbsp; cards;&lt;/P&gt;&lt;P&gt;1 10/01/2012:00:00:15&lt;/P&gt;&lt;P&gt;2 10/01/2012:00:00:16&lt;/P&gt;&lt;P&gt;3 10/01/2012:00:00:35&lt;/P&gt;&lt;P&gt;4 10/01/2012:00:00:37&lt;/P&gt;&lt;P&gt;5 10/01/2012:00:00:55&lt;/P&gt;&lt;P&gt;6 10/01/2012:00:01:18&lt;/P&gt;&lt;P&gt;7 10/01/2012:00:01:45&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;&amp;nbsp; create table want as&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select *, abs(b.dt2-a.dt1) as diff&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from have1 a, have2 b&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; group by a.dt1&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; having calculated diff = min(calculated diff)&lt;/P&gt;&lt;P&gt;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 30 Nov 2012 21:45:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/What-would-be-hash-equivalent-for-this-sql-join/m-p/87281#M18638</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2012-11-30T21:45:54Z</dc:date>
    </item>
    <item>
      <title>Re: What would be hash equivalent for this sql join?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/What-would-be-hash-equivalent-for-this-sql-join/m-p/87282#M18639</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Art,&lt;/P&gt;&lt;P&gt;It can&amp;nbsp; be done, but it won't be pretty:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if _n_=1 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if 0 then set have2;&lt;/P&gt;&lt;P&gt;declare hash h(dataset:'have2');&lt;/P&gt;&lt;P&gt;h.definekey('recnum2');&lt;/P&gt;&lt;P&gt;h.definedata(all:'y');&lt;/P&gt;&lt;P&gt;&amp;nbsp; h.definedone();&lt;/P&gt;&lt;P&gt;&amp;nbsp; declare hiter hi('h');&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set have1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; _rc=hi.first();&lt;/P&gt;&lt;P&gt;diff=dt2+dt1;;&lt;/P&gt;&lt;P&gt;do _rc=0 by 0 while (_rc=0);&lt;/P&gt;&lt;P&gt;_d=abs(dt2-dt1); &lt;/P&gt;&lt;P&gt;&amp;nbsp; if _d&amp;lt;diff then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; _num=recnum2;&lt;/P&gt;&lt;P&gt;diff=_d;&lt;/P&gt;&lt;P&gt;_dt=dt2;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;_rc=hi.next();&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; recnum2=_num;&lt;/P&gt;&lt;P&gt;dt2=_dt;&lt;/P&gt;&lt;P&gt;drop _:;&lt;/P&gt;&lt;P&gt;&amp;nbsp; run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Haikuo &lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 30 Nov 2012 23:06:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/What-would-be-hash-equivalent-for-this-sql-join/m-p/87282#M18639</guid>
      <dc:creator>Haikuo</dc:creator>
      <dc:date>2012-11-30T23:06:26Z</dc:date>
    </item>
    <item>
      <title>Re: What would be hash equivalent for this sql join?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/What-would-be-hash-equivalent-for-this-sql-join/m-p/87283#M18640</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I'm running your code now.&amp;nbsp; I'll let you know if it works.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 01 Dec 2012 01:01:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/What-would-be-hash-equivalent-for-this-sql-join/m-p/87283#M18640</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2012-12-01T01:01:29Z</dc:date>
    </item>
    <item>
      <title>Re: What would be hash equivalent for this sql join?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/What-would-be-hash-equivalent-for-this-sql-join/m-p/87284#M18641</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I'd be curious to know how it compares with (tested with your example data only) :&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;data want(keep=dt1 recNum1 dtC recNumC);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;retain recNumR dtR recNum2 dt2;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;format dtC datetime19.;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;set have1;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;do while (dt2 &amp;lt; dt1 and not have2end);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set have2 end=have2end;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if dt2 &amp;lt; dt1 then do;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; recNumR = recNum2;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dtR = dt2;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;if dt1 + dt1 - dt2 &amp;lt; dtR then do;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dtC = dtR;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; recNumC = recNumR;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;else do;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dtC = dt2;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; recNumC = recNum2;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PG&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 01 Dec 2012 01:11:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/What-would-be-hash-equivalent-for-this-sql-join/m-p/87284#M18641</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2012-12-01T01:11:27Z</dc:date>
    </item>
    <item>
      <title>Re: What would be hash equivalent for this sql join?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/What-would-be-hash-equivalent-for-this-sql-join/m-p/87285#M18642</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;A __default_attr="2746" __jive_macro_name="user" class="jive_macro jive_macro_user" data-objecttype="3" href="https://communities.sas.com/"&gt;&lt;/A&gt;: I'll test it as soon as I get a chance this weekend&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;A __default_attr="5068" __jive_macro_name="user" class="jive_macro jive_macro_user" data-objecttype="3" href="https://communities.sas.com/"&gt;&lt;/A&gt;: Beauty is in the eye of the beholder!&amp;nbsp; From two hours (for the proc sql version), to just over 4 minutes for your version, is extremely pretty to me!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;An extra credit question for both approaches.&amp;nbsp; What if I need to expand the task to accommodate multiple groups and need the match to be group specific (i.e., in the sql code had an extra line: on gorup1=group2)?&amp;nbsp; e.g.:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;data have1;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp; informat dt1 anydtdtm19.;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp; format dt1 datetime19.;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp; input group1 recnum1 dt1;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp; cards;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;1 1 10/01/2012:00:00:10&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;1 2 10/01/2012:00:00:30&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;1 3 10/01/2012:00:00:50&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;1 4 10/01/2012:00:01:10&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;1 5 10/01/2012:00:01:30&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;2 1 10/01/2012:00:00:11&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;2 2 10/01/2012:00:00:31&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;2 3 10/01/2012:00:00:51&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;2 4 10/01/2012:00:01:11&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;2 5 10/01/2012:00:01:31&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;3 1 10/01/2012:00:00:12&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;3 2 10/01/2012:00:00:32&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;3 3 10/01/2012:00:00:52&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;3 4 10/01/2012:00:01:12&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;3 5 10/01/2012:00:01:32&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;data have2;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp; informat dt2 anydtdtm19.;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp; format dt2 datetime19.;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp; input group2 recnum2 dt2;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;&amp;nbsp; cards;&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;1 1 10/01/2012:00:00:15&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;1 2 10/01/2012:00:00:16&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;1 3 10/01/2012:00:00:35&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;1 4 10/01/2012:00:00:37&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;1 5 10/01/2012:00:00:55&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;1 6 10/01/2012:00:01:18&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;1 7 10/01/2012:00:01:45&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;2 1 10/01/2012:00:00:16&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;2 2 10/01/2012:00:00:17&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;2 3 10/01/2012:00:00:36&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;2 4 10/01/2012:00:00:38&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;2 5 10/01/2012:00:00:56&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;2 6 10/01/2012:00:01:19&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;2 7 10/01/2012:00:01:46&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;3 1 10/01/2012:00:00:15&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;3 2 10/01/2012:00:00:16&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;3 3 10/01/2012:00:00:35&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;3 4 10/01/2012:00:00:37&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;3 5 10/01/2012:00:00:55&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;3 6 10/01/2012:00:01:18&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;3 7 10/01/2012:00:01:45&lt;/P&gt;&lt;P style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 01 Dec 2012 02:29:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/What-would-be-hash-equivalent-for-this-sql-join/m-p/87285#M18642</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2012-12-01T02:29:44Z</dc:date>
    </item>
    <item>
      <title>Re: What would be hash equivalent for this sql join?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/What-would-be-hash-equivalent-for-this-sql-join/m-p/87286#M18643</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Art,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Would you&amp;nbsp; please post a simple question so I would be able to help?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 01 Dec 2012 02:45:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/What-would-be-hash-equivalent-for-this-sql-join/m-p/87286#M18643</guid>
      <dc:creator>Linlin</dc:creator>
      <dc:date>2012-12-01T02:45:37Z</dc:date>
    </item>
    <item>
      <title>Re: What would be hash equivalent for this sql join?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/What-would-be-hash-equivalent-for-this-sql-join/m-p/87287#M18644</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Art,&lt;/P&gt;&lt;P&gt;Now I finally ditch Hiter():&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if _n_=1 then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if 0 then set have2;&lt;/P&gt;&lt;P&gt;declare hash h(dataset:'have2', multidata:'y');&lt;/P&gt;&lt;P&gt;h.definekey('group2');&lt;/P&gt;&lt;P&gt;h.definedata(all:'y');&lt;/P&gt;&lt;P&gt;&amp;nbsp; h.definedone();&lt;/P&gt;&lt;P&gt;/*&amp;nbsp; declare hiter hi('h');*/&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set have1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; _rc=h.find(key:group1);&lt;/P&gt;&lt;P&gt;&amp;nbsp; diff=dt2+dt1;;&lt;/P&gt;&lt;P&gt;do _rc=0 by 0 while (_rc=0);&lt;/P&gt;&lt;P&gt; _d=abs(dt2-dt1);&lt;/P&gt;&lt;P&gt;&amp;nbsp; if _d&amp;lt;diff then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; _num=recnum2;&lt;/P&gt;&lt;P&gt;&amp;nbsp; diff=_d;&lt;/P&gt;&lt;P&gt; _dt=dt2;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;_rc=h.find_next();&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; recnum2=_num;&lt;/P&gt;&lt;P&gt;dt2=_dt;&lt;/P&gt;&lt;P&gt;drop _:;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Haikuo&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 01 Dec 2012 03:04:57 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/What-would-be-hash-equivalent-for-this-sql-join/m-p/87287#M18644</guid>
      <dc:creator>Haikuo</dc:creator>
      <dc:date>2012-12-01T03:04:57Z</dc:date>
    </item>
    <item>
      <title>Re: What would be hash equivalent for this sql join?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/What-would-be-hash-equivalent-for-this-sql-join/m-p/87288#M18645</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;A __default_attr="3068" __jive_macro_name="user" class="jive_macro jive_macro_user" data-objecttype="3" href="https://communities.sas.com/"&gt;&lt;/A&gt;: How often to I EVER post questions other than questions about what someone was asking for?&amp;nbsp; Bet you could have answered this one if you had tried!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 01 Dec 2012 03:18:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/What-would-be-hash-equivalent-for-this-sql-join/m-p/87288#M18645</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2012-12-01T03:18:22Z</dc:date>
    </item>
    <item>
      <title>Re: What would be hash equivalent for this sql join?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/What-would-be-hash-equivalent-for-this-sql-join/m-p/87289#M18646</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;A __default_attr="5068" __jive_macro_name="user" class="jive_macro jive_macro_user" href="https://communities.sas.com/"&gt;&lt;/A&gt;: You outdid yourself.&amp;nbsp; This one only took 7.5 minutes to run a set of files that were four times larger than the first file.&amp;nbsp; I'm impressed!&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;A __default_attr="2746" __jive_macro_name="user" class="jive_macro jive_macro_user" href="https://communities.sas.com/"&gt;&lt;/A&gt;: Amazingly fast, even faster than Haikuo's code, but had an error.&amp;nbsp; The last record is assigned to the wrong group.&amp;nbsp; Both records 4 and 5 should have been assigned to have2's record number 6, but only one was.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 01 Dec 2012 06:13:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/What-would-be-hash-equivalent-for-this-sql-join/m-p/87289#M18646</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2012-12-01T06:13:48Z</dc:date>
    </item>
    <item>
      <title>Re: What would be hash equivalent for this sql join?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/What-would-be-hash-equivalent-for-this-sql-join/m-p/87290#M18647</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Art, I havent lost all hope. Getting to the wrong answer the fastest and (I assume) with the smallest memory usage is already something! I think I fixed it :&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;data want (keep=recNum1 dt1 recNumC dtC);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;retain recNumR dtR recNum2 dt2;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;format dtC dtR datetime19.;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;set have1;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;do while (dt2 &amp;lt; dt1 and not have2end);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if dtR &amp;lt;= dt2 then do;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; recNumR = recNum2;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dtR = dt2;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set have2 end=have2end;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;if dt1 + dt1 - dt2 &amp;lt; dtR then do;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dtC = dtR;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; recNumC = recNumR;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;else do;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dtC = dt2;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; recNumC = recNum2;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-size: 12pt; font-family: calibri, verdana, arial, sans-serif;"&gt;run;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PG&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 01 Dec 2012 20:58:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/What-would-be-hash-equivalent-for-this-sql-join/m-p/87290#M18647</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2012-12-01T20:58:13Z</dc:date>
    </item>
    <item>
      <title>Re: What would be hash equivalent for this sql join?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/What-would-be-hash-equivalent-for-this-sql-join/m-p/87291#M18648</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;A __default_attr="2746" __jive_macro_name="user" class="jive_macro jive_macro_user" data-objecttype="3" href="https://communities.sas.com/"&gt;&lt;/A&gt;: I'd have given you another helpful mark, but I've already used up my allowable ratings for this question.&amp;nbsp; I'm leaving Haikuo's response as being the correct one, as the thread did in fact ask for a hash solution.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;However, that said, your suggested approach was definitely the best way to go and the one I actually ended up using.&amp;nbsp; On the actual data, the original proc sql approach was excessive, as it took eight hours and ate up over 500 gigabytes of disk space during the process.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Haikuo's approach was a significant improvement, only taking 7.5 minutes and only using up the disk space needed to accommodate the raw data*2.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I went with a variant of your code, though, and obtained the same results, only taking a total of 4.5 seconds, and only using up the disk space needed to accommodate the raw data*2.&amp;nbsp; In short, I'm extremely grateful that you suggested the sequential approach, as it was CLEARLY the best way to solve the problem.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 02 Dec 2012 15:26:52 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/What-would-be-hash-equivalent-for-this-sql-join/m-p/87291#M18648</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2012-12-02T15:26:52Z</dc:date>
    </item>
    <item>
      <title>Re: What would be hash equivalent for this sql join?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/What-would-be-hash-equivalent-for-this-sql-join/m-p/87292#M18649</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thanks Art. That's an astonishing improvement.&amp;nbsp; - PG&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 02 Dec 2012 16:05:31 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/What-would-be-hash-equivalent-for-this-sql-join/m-p/87292#M18649</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2012-12-02T16:05:31Z</dc:date>
    </item>
    <item>
      <title>Re: What would be hash equivalent for this sql join?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/What-would-be-hash-equivalent-for-this-sql-join/m-p/87293#M18650</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi, &lt;A __default_attr="2746" __jive_macro_name="user" class="jive_macro jive_macro_user" data-objecttype="3" href="https://communities.sas.com/"&gt;&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;That's an astonishing piece of code! It's a pattern that I've never seen before, nor thought of, but it's brilliant.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;It's interesting that Art's original SQL is so clean, I would have thought this more difficult to express in SQL. But you can certainly see that it needs to go into a full-blown Cartesian to solve it, so I'm not surprised the duration is very long.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The hash solution is much faster, but at the expense of i) using up memory for the entire table, so at some volume the solution will fail; and ii) it still implements a cartesian-style double DOW loop.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;In yours, for the simple cost of sorting both datasets, you've turned it into roughly a nobs(a) + nobs(b), instead of nobs(a) * nobs(b). Also, there are no memory implications, so you could scale this till you run out of disk.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Brilliant! My hat's off to you today.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;BTW &lt;A __default_attr="149594" __jive_macro_name="user" class="jive_macro jive_macro_user" data-objecttype="3" href="https://communities.sas.com/"&gt;&lt;/A&gt;, how many records were in your real have1 and have2, just to get an idea of volumetrics?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Tom&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 02 Dec 2012 16:52:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/What-would-be-hash-equivalent-for-this-sql-join/m-p/87293#M18650</guid>
      <dc:creator>TomKari</dc:creator>
      <dc:date>2012-12-02T16:52:15Z</dc:date>
    </item>
    <item>
      <title>Re: What would be hash equivalent for this sql join?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/What-would-be-hash-equivalent-for-this-sql-join/m-p/87294#M18651</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;A __default_attr="379045" __jive_macro_name="user" class="jive_macro jive_macro_user" data-objecttype="3" href="https://communities.sas.com/"&gt;&lt;/A&gt;: The real data had over 100,000 records per file, each file contained over 300 variables, and there were four by groups.&amp;nbsp; The variant of Pierre's code that I actually implemented sorted the files, did a proc transpose on have2, loaded the have2 datetimes into an array at the start of each by group, and then used Pierre's sequential search to obtain the closest values from the array.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;As soon as I saw Pierre's code I realized that a sequential search was all that was needed.&amp;nbsp; In short, I totally agree with your summation.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 02 Dec 2012 17:06:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/What-would-be-hash-equivalent-for-this-sql-join/m-p/87294#M18651</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2012-12-02T17:06:44Z</dc:date>
    </item>
    <item>
      <title>Re: What would be hash equivalent for this sql join?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/What-would-be-hash-equivalent-for-this-sql-join/m-p/87295#M18652</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Arthur,&lt;/P&gt;&lt;P&gt;Acutally you can use a simple array to get it, No reason for Hash Table .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;data have1;
&amp;nbsp; informat dt1 anydtdtm19.;
&amp;nbsp; format dt1 datetime19.;
&amp;nbsp; input recnum1 dt1;
&amp;nbsp; cards;
1 10/01/2012:00:00:10
2 10/01/2012:00:00:30
3 10/01/2012:00:00:50
4 10/01/2012:00:01:10
5 10/01/2012:00:01:30
;
 
data have2;
&amp;nbsp; informat dt2 anydtdtm19.;
&amp;nbsp; format dt2 datetime19.;
&amp;nbsp; input recnum2 dt2;
&amp;nbsp; cards;
1 10/01/2012:00:00:15
2 10/01/2012:00:00:16
3 10/01/2012:00:00:35
4 10/01/2012:00:00:37
5 10/01/2012:00:00:55
6 10/01/2012:00:01:18
7 10/01/2012:00:01:45
;
data want;
 array a{10000} _temporary_;
 array b{10000} _temporary_;

 do until(last);
&amp;nbsp; set have2 end=last;
&amp;nbsp; n+1;
&amp;nbsp; a{n}=dt2;
&amp;nbsp; b{n}=recnum2;
 end;

do until(_last);
set have1 end=_last;
temp=99999;
 do i=1 to n;
&amp;nbsp; if abs(a{i}-dt1) lt temp then do;ii=i;min=abs(a{i}-dt1);end;
&amp;nbsp; temp=abs(a{i}-dt1);
 end;
dt2=a{ii};
recnum2=b{ii};
 output;
end;
drop i n ii&amp;nbsp; temp;
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;&lt;/P&gt;&lt;P&gt;Ksharp&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 03 Dec 2012 06:22:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/What-would-be-hash-equivalent-for-this-sql-join/m-p/87295#M18652</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2012-12-03T06:22:29Z</dc:date>
    </item>
  </channel>
</rss>

