<?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: Matching Based on closest value in SAS Data Management</title>
    <link>https://communities.sas.com/t5/SAS-Data-Management/Matching-Based-on-closest-value/m-p/597553#M18226</link>
    <description>&lt;P&gt;For now i just need the closest. greater than or less than doesnt matter. but in future for some other matching i may need it. so some sample codes with that may also help for future work.&lt;/P&gt;</description>
    <pubDate>Thu, 17 Oct 2019 22:32:18 GMT</pubDate>
    <dc:creator>Takdir</dc:creator>
    <dc:date>2019-10-17T22:32:18Z</dc:date>
    <item>
      <title>Matching Based on closest value</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/Matching-Based-on-closest-value/m-p/597542#M18224</link>
      <description>&lt;P&gt;I have 2 tables that I need to match based o date and maturity. However the dates and maturity dont match exactly. So i need to take the closest value. Is there any simple way to do it ?&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Date&lt;/TD&gt;&lt;TD&gt;maturity&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;01-Mar&lt;/TD&gt;&lt;TD&gt;1.2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;01-Mar&lt;/TD&gt;&lt;TD&gt;2.3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;01-Mar&lt;/TD&gt;&lt;TD&gt;3.1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;02-Mar&lt;/TD&gt;&lt;TD&gt;1.4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;02-Mar&lt;/TD&gt;&lt;TD&gt;1.6&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;02-Mar&lt;/TD&gt;&lt;TD&gt;2.7&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;03-Mar&lt;/TD&gt;&lt;TD&gt;1.1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;03-Mar&lt;/TD&gt;&lt;TD&gt;2.3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;03-Mar&lt;/TD&gt;&lt;TD&gt;3.4&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Date_given&lt;/TD&gt;&lt;TD&gt;maturity_given&lt;/TD&gt;&lt;TD&gt;Rate&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;01-Mar&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;01-Mar&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;01-Mar&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;02-Mar&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;02-Mar&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;02-Mar&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;9&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;04-Mar&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;04-Mar&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;04-Mar&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks in Advance &lt;span class="lia-unicode-emoji" title=":grinning_face_with_smiling_eyes:"&gt;😄&lt;/span&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 17 Oct 2019 22:00:41 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/Matching-Based-on-closest-value/m-p/597542#M18224</guid>
      <dc:creator>Takdir</dc:creator>
      <dc:date>2019-10-17T22:00:41Z</dc:date>
    </item>
    <item>
      <title>Re: Matching Based on closest value</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/Matching-Based-on-closest-value/m-p/597551#M18225</link>
      <description>&lt;P&gt;Do you have any restrictions such a "closest greater than" or "closest less than" ? Any rule for preference if you have two "closest" such as&amp;nbsp;&amp;nbsp; comparing 2 to 1.8 and 2.2 which both have an absolute difference of 0.2?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You really should show the desired result for your given example data as well. I am not quite sure if you are expecting to match on the date exactly or not as a condition.&lt;/P&gt;</description>
      <pubDate>Thu, 17 Oct 2019 22:22:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/Matching-Based-on-closest-value/m-p/597551#M18225</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2019-10-17T22:22:37Z</dc:date>
    </item>
    <item>
      <title>Re: Matching Based on closest value</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/Matching-Based-on-closest-value/m-p/597553#M18226</link>
      <description>&lt;P&gt;For now i just need the closest. greater than or less than doesnt matter. but in future for some other matching i may need it. so some sample codes with that may also help for future work.&lt;/P&gt;</description>
      <pubDate>Thu, 17 Oct 2019 22:32:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/Matching-Based-on-closest-value/m-p/597553#M18226</guid>
      <dc:creator>Takdir</dc:creator>
      <dc:date>2019-10-17T22:32:18Z</dc:date>
    </item>
    <item>
      <title>Re: Matching Based on closest value</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/Matching-Based-on-closest-value/m-p/597562#M18227</link>
      <description>&lt;P&gt;I think this does what you are asking:&lt;/P&gt;
&lt;P&gt;Please note the data steps to provide example data. You will usually get better results providing data in this form pasted into code boxes opened using the forum's {I} icon.&lt;/P&gt;
&lt;PRE&gt;data work.table1;
input Date $ maturity ;
datalines;
01-Mar 1.2 
01-Mar 2.3 
01-Mar 3.1 
02-Mar 1.4 
02-Mar 1.6 
02-Mar 2.7 
03-Mar 1.1 
03-Mar 2.3 
03-Mar 3.4 
;

data work.table2;
input Date_given $ maturity_given Rate ;
datalines;
01-Mar 1 1 
01-Mar 2 2 
01-Mar 3 4 
02-Mar 1 5 
02-Mar 2 8 
02-Mar 3 9 
04-Mar 1 3 
04-Mar 2 5 
04-Mar 3 7 
;

proc sql;
   create table work.want as
   select a.date, a.maturity, b.rate, abs(a.maturity-b.maturity_given) as diff
   from work.table1 as a
        join
        work.table2 as b
        on a.date=b.date_given
   group by a.date, a.maturity

   having diff= min(diff)
   ;
quit;

proc sql;
   create table work.want as
   select a.date, a.maturity, b.rate
   from work.table1 as a
        join
        work.table2 as b
        on a.date=b.date_given
   group by a.date, a.maturity

   having abs(a.maturity-b.maturity_given)= min(abs(a.maturity-b.maturity_given))
   ;
quit;
   
&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You could use other than the ABS function to calculate&amp;nbsp;difference using the order you need.&amp;nbsp;&amp;nbsp;If the sign is important and then add an additional condition to the Having clause to include positive or negative values of the difference.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The diff variable&lt;/P&gt;</description>
      <pubDate>Thu, 17 Oct 2019 23:07:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/Matching-Based-on-closest-value/m-p/597562#M18227</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2019-10-17T23:07:19Z</dc:date>
    </item>
    <item>
      <title>Re: Matching Based on closest value</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/Matching-Based-on-closest-value/m-p/597567#M18228</link>
      <description>&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Date&lt;/TD&gt;&lt;TD&gt;maturity&lt;/TD&gt;&lt;TD&gt;Rate&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;01-Mar&lt;/TD&gt;&lt;TD&gt;1.2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;01-Mar&lt;/TD&gt;&lt;TD&gt;2.3&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;01-Mar&lt;/TD&gt;&lt;TD&gt;3.1&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;02-Mar&lt;/TD&gt;&lt;TD&gt;1.4&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;02-Mar&lt;/TD&gt;&lt;TD&gt;1.6&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;02-Mar&lt;/TD&gt;&lt;TD&gt;2.7&lt;/TD&gt;&lt;TD&gt;9&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;03-Mar&lt;/TD&gt;&lt;TD&gt;1.1&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;03-Mar&lt;/TD&gt;&lt;TD&gt;2.3&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;03-Mar&lt;/TD&gt;&lt;TD&gt;3.4&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This is the result I was expecting. The date doesnt match in the 2 tables because 1 has march 3 and the other has march 4&lt;/P&gt;</description>
      <pubDate>Thu, 17 Oct 2019 23:25:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/Matching-Based-on-closest-value/m-p/597567#M18228</guid>
      <dc:creator>Takdir</dc:creator>
      <dc:date>2019-10-17T23:25:25Z</dc:date>
    </item>
    <item>
      <title>Re: Matching Based on closest value</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/Matching-Based-on-closest-value/m-p/597794#M18230</link>
      <description>&lt;P&gt;That might be an entirely different problem than you described. Is the actual issue that you have two tables that have the same number of rows (critical here) and just need to match them in order?&lt;/P&gt;
&lt;PRE&gt;data work.table1;
input Date $ maturity ;
datalines;
01-Mar 1.2 
01-Mar 2.3 
01-Mar 3.1 
02-Mar 1.4 
02-Mar 1.6 
02-Mar 2.7 
03-Mar 1.1 
03-Mar 2.3 
03-Mar 3.4 
;

data work.table2;
input Date_given $ maturity_given Rate ;
datalines;
01-Mar 1 1 
01-Mar 2 2 
01-Mar 3 4 
02-Mar 1 5 
02-Mar 2 8 
02-Mar 3 9 
04-Mar 1 3 
04-Mar 2 5 
04-Mar 3 7 
;

data work.want;
   merge work.table1 work.table2;
   drop date_given maturity_given;
run;&lt;/PRE&gt;
&lt;P&gt;If not then you I still think your problem description in incomplete.&lt;/P&gt;</description>
      <pubDate>Fri, 18 Oct 2019 18:03:04 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/Matching-Based-on-closest-value/m-p/597794#M18230</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2019-10-18T18:03:04Z</dc:date>
    </item>
  </channel>
</rss>

