<?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: Merge by date and date range in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Merge-by-date-and-date-range/m-p/837718#M331245</link>
    <description>&lt;P&gt;The data step is not going to do this type of many-to-many merge properly (without a lot of extra programing).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Better to use SQL.&lt;/P&gt;
&lt;P&gt;Looks like you just want to categorize the combinations.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql ;
create table want as 
  select case when (not missing(one.id) and not missing(two.id)) then 1
              when (not missing(one.id)) then 2
              else 3 end as group
       , coalesce(one.id,two.id) as id
       , one.datex
       , two.dateint1
       , two.dateint2
  from one full join two
  on one.id=two.id and one.datex between two.dateint1 and two.dateint2
  order by group,id,datex,dateint1
;
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;PRE&gt;Obs    group    id         datex      dateint1      dateint2

 1       1       1    2021-10-10    2021-10-03    2021-10-17
 2       1       1    2022-08-15    2022-08-08    2022-08-22
 3       2       1    2022-03-22             .             .
 4       2       2    2020-05-06             .             .
 5       3       1             .    2022-04-01    2022-04-14
 6       3       1             .    2022-12-02    2022-12-17
&lt;/PRE&gt;</description>
    <pubDate>Mon, 10 Oct 2022 18:20:21 GMT</pubDate>
    <dc:creator>Tom</dc:creator>
    <dc:date>2022-10-10T18:20:21Z</dc:date>
    <item>
      <title>Merge by date and date range</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Merge-by-date-and-date-range/m-p/837713#M331242</link>
      <description>&lt;P&gt;I have two datasets as follows:&lt;/P&gt;&lt;P&gt;data one;&lt;BR /&gt;input ID Datex ;&lt;BR /&gt;informat datex yymmdd10.;&lt;BR /&gt;format Datex yymmdd10.;&lt;BR /&gt;datalines;&lt;BR /&gt;1 2021-10-10&lt;BR /&gt;1 2022-03-22&lt;BR /&gt;1 2022-08-15&lt;BR /&gt;2 2020-05-06&lt;BR /&gt;;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;data two;&lt;BR /&gt;input ID Dateint1 Dateint2;&lt;BR /&gt;informat Dateint1 Dateint2 yymmdd10.;&lt;BR /&gt;format Dateint1 Dateint2 yymndd10.;&lt;BR /&gt;datalines;&lt;BR /&gt;1 2021-10-03 2021-10-17&lt;BR /&gt;1 2022-04-01 2022-04-14&lt;BR /&gt;1 2022-08-08 2022-08-22&lt;BR /&gt;1 2022-12-02 2022-12-17&lt;/P&gt;&lt;P&gt;;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;My aim is to create 3 datasets by merging&amp;nbsp;&lt;STRONG&gt;one&lt;/STRONG&gt; with&amp;nbsp;&amp;nbsp;&lt;STRONG&gt;two&lt;/STRONG&gt;&amp;nbsp;in different ways:&lt;/P&gt;&lt;P&gt;The first dataset I create is when the date variable in &lt;STRONG&gt;one&lt;/STRONG&gt; fits within the date interval in dataset &lt;STRONG&gt;two&lt;/STRONG&gt;. The code is:&lt;/P&gt;&lt;P&gt;data match;&lt;BR /&gt;merge one (in=a) two (in=b)&lt;BR /&gt;by Id;&lt;BR /&gt;if a and b and Dateint1&amp;lt;=Datex&amp;lt;=Dateint2 then output;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;The results&amp;nbsp; I get are as required:&lt;/P&gt;&lt;P&gt;ID&amp;nbsp; &amp;nbsp; Datex&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Dateint1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Dateint2&lt;BR /&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp;2021-10-10&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2021-10-03&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2021-10-17&lt;BR /&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp;2022-08-15&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2022-08-08&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2022-08-22&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I need help with code for the next two tables:&lt;/P&gt;&lt;P&gt;A merge where data exist in table &lt;STRONG&gt;one&lt;/STRONG&gt; but not in &lt;STRONG&gt;two&lt;/STRONG&gt;. The results should look like this:&lt;/P&gt;&lt;P&gt;ID Datex&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Dateint1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Dateint2&lt;BR /&gt;1 2022-03-22&amp;nbsp; &amp;nbsp; &amp;nbsp; .&amp;nbsp; &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;BR /&gt;2 2022-05-06&amp;nbsp; &amp;nbsp; &amp;nbsp; .&amp;nbsp; &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;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;A merge where data do not exist in table &lt;STRONG&gt;one&lt;/STRONG&gt; but exist in table &lt;STRONG&gt;two&lt;/STRONG&gt;. The results should look like this:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;ID&amp;nbsp; &amp;nbsp;Datex&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Dateint1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Dateint2&lt;BR /&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp;.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2022-04-01&amp;nbsp; &amp;nbsp; 2022-04-14&lt;BR /&gt;2&amp;nbsp; &amp;nbsp; &amp;nbsp;.&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2022-12-02&amp;nbsp; &amp;nbsp; 2022-12-17&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks!&lt;/P&gt;</description>
      <pubDate>Mon, 10 Oct 2022 17:43:02 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Merge-by-date-and-date-range/m-p/837713#M331242</guid>
      <dc:creator>MCB2</dc:creator>
      <dc:date>2022-10-10T17:43:02Z</dc:date>
    </item>
    <item>
      <title>Re: Merge by date and date range</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Merge-by-date-and-date-range/m-p/837718#M331245</link>
      <description>&lt;P&gt;The data step is not going to do this type of many-to-many merge properly (without a lot of extra programing).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Better to use SQL.&lt;/P&gt;
&lt;P&gt;Looks like you just want to categorize the combinations.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql ;
create table want as 
  select case when (not missing(one.id) and not missing(two.id)) then 1
              when (not missing(one.id)) then 2
              else 3 end as group
       , coalesce(one.id,two.id) as id
       , one.datex
       , two.dateint1
       , two.dateint2
  from one full join two
  on one.id=two.id and one.datex between two.dateint1 and two.dateint2
  order by group,id,datex,dateint1
;
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;PRE&gt;Obs    group    id         datex      dateint1      dateint2

 1       1       1    2021-10-10    2021-10-03    2021-10-17
 2       1       1    2022-08-15    2022-08-08    2022-08-22
 3       2       1    2022-03-22             .             .
 4       2       2    2020-05-06             .             .
 5       3       1             .    2022-04-01    2022-04-14
 6       3       1             .    2022-12-02    2022-12-17
&lt;/PRE&gt;</description>
      <pubDate>Mon, 10 Oct 2022 18:20:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Merge-by-date-and-date-range/m-p/837718#M331245</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2022-10-10T18:20:21Z</dc:date>
    </item>
  </channel>
</rss>

