<?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 two datasets by ID and date range in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Merge-two-datasets-by-ID-and-date-range/m-p/329683#M73816</link>
    <description>&lt;P&gt;If I understand the question :&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data d1;
input ID	DATE :mmddyy.;
format date yymmdd10.;
datalines;
1	10/13/2010
1	10/20/2010
1	10/27/2010
1	11/3/2010
2	1/31/2011
2	1/31/2011
2	2/2/2011
2	2/7/2011
2	2/7/2011
3	7/26/2011
3	7/26/2011
3	7/28/2011
3	8/1/2011
3	8/2/2011
3	8/2/2011
3	8/4/2011
3	8/8/2011
3	8/9/2011
;

data d2;
input ID	Count	(start 	end) (:mmddyy10.);
format start end yymmdd10.;
datalines;
1	1	10/18/2010	10/18/2010
2	1	2/1/2011	2/6/2011
3	1	7/27/2011	7/27/2011
3	3	8/2/2011	 .
;

data d3;
set d1;
n = _n_;
run;

proc sql;
create table want as
select d3.id, d3.date, 
    max(case when date &amp;gt;= start and date &amp;lt;= coalesce(end, '01jan2100'd) 
        then count
        else . end) as count
from d3 left join d2 on d3.id=d2.id
group by n, d3.id, date;
select * from want;
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;You could use SUM instead of MAX if you want the sum of counts when multiple ranges match for a given id.&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Fri, 03 Feb 2017 05:08:43 GMT</pubDate>
    <dc:creator>PGStats</dc:creator>
    <dc:date>2017-02-03T05:08:43Z</dc:date>
    <item>
      <title>Merge two datasets by ID and date range</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Merge-two-datasets-by-ID-and-date-range/m-p/329644#M73792</link>
      <description>&lt;P&gt;dataset 1:&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;DATE&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;10/13/2010&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;10/20/2010&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;10/27/2010&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;11/3/2010&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1/31/2011&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1/31/2011&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;2/2/2011&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;2/7/2011&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;2/7/2011&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;7/26/2011&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;7/26/2011&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;7/28/2011&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;8/1/2011&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;8/2/2011&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;8/2/2011&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;8/4/2011&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;8/8/2011&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;8/9/2011&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;dataset 2:&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;Count&lt;/TD&gt;&lt;TD&gt;start&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;end&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;10/18/2010&lt;/TD&gt;&lt;TD&gt;10/18/2010&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2/1/2011&lt;/TD&gt;&lt;TD&gt;2/6/2011&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;7/27/2011&lt;/TD&gt;&lt;TD&gt;7/27/2011&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;8/2/2011&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;want:&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;DATE&lt;/TD&gt;&lt;TD&gt;Count&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;10/13/2010&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;10/20/2010&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;10/27/2010&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;11/3/2010&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1/31/2011&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1/31/2011&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;2/2/2011&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;2/7/2011&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;2/7/2011&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;7/26/2011&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;7/26/2011&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;7/28/2011&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;8/1/2011&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;8/2/2011&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;8/2/2011&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;8/4/2011&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;8/8/2011&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;8/9/2011&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I want to merge the dataset1 and dataset2 by id and date, if the date in dataset1 falls in between start and end date of dataset2. in case if the end date is missing in the dataset2 then the count value should be retained across the rest of the observations in dataset1.&lt;/P&gt;&lt;P&gt;Any help to achieve this in sas?&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;</description>
      <pubDate>Thu, 02 Feb 2017 23:26:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Merge-two-datasets-by-ID-and-date-range/m-p/329644#M73792</guid>
      <dc:creator>ari</dc:creator>
      <dc:date>2017-02-02T23:26:14Z</dc:date>
    </item>
    <item>
      <title>Re: Merge two datasets by ID and date range</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Merge-two-datasets-by-ID-and-date-range/m-p/329680#M73814</link>
      <description>&lt;P&gt;Do you have a field that's unique for each date range (in dataset2). I mean in the data below you gave has ID that looks like the key but is having same value (3) for two different date range ?&lt;/P&gt;</description>
      <pubDate>Fri, 03 Feb 2017 04:31:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Merge-two-datasets-by-ID-and-date-range/m-p/329680#M73814</guid>
      <dc:creator>anoopmohandas7</dc:creator>
      <dc:date>2017-02-03T04:31:07Z</dc:date>
    </item>
    <item>
      <title>Re: Merge two datasets by ID and date range</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Merge-two-datasets-by-ID-and-date-range/m-p/329683#M73816</link>
      <description>&lt;P&gt;If I understand the question :&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data d1;
input ID	DATE :mmddyy.;
format date yymmdd10.;
datalines;
1	10/13/2010
1	10/20/2010
1	10/27/2010
1	11/3/2010
2	1/31/2011
2	1/31/2011
2	2/2/2011
2	2/7/2011
2	2/7/2011
3	7/26/2011
3	7/26/2011
3	7/28/2011
3	8/1/2011
3	8/2/2011
3	8/2/2011
3	8/4/2011
3	8/8/2011
3	8/9/2011
;

data d2;
input ID	Count	(start 	end) (:mmddyy10.);
format start end yymmdd10.;
datalines;
1	1	10/18/2010	10/18/2010
2	1	2/1/2011	2/6/2011
3	1	7/27/2011	7/27/2011
3	3	8/2/2011	 .
;

data d3;
set d1;
n = _n_;
run;

proc sql;
create table want as
select d3.id, d3.date, 
    max(case when date &amp;gt;= start and date &amp;lt;= coalesce(end, '01jan2100'd) 
        then count
        else . end) as count
from d3 left join d2 on d3.id=d2.id
group by n, d3.id, date;
select * from want;
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;You could use SUM instead of MAX if you want the sum of counts when multiple ranges match for a given id.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 03 Feb 2017 05:08:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Merge-two-datasets-by-ID-and-date-range/m-p/329683#M73816</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2017-02-03T05:08:43Z</dc:date>
    </item>
    <item>
      <title>Re: Merge two datasets by ID and date range</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Merge-two-datasets-by-ID-and-date-range/m-p/329704#M73824</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/462"&gt;@PGStats&lt;/a&gt;: thanks. when i run it on the complete dataset the following error occurs.&lt;/P&gt;&lt;P&gt;WARNING: A GROUP BY clause has been transformed into an ORDER BY clause because neither the&lt;BR /&gt;SELECT clause nor the optional HAVING clause of the associated table-expression&lt;BR /&gt;referenced a summary function&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#000000"&gt;I have checked the date format of all variables in both input datasets but &amp;nbsp;not sure why &amp;nbsp;this error is occuring. Any ideas?&lt;/FONT&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 03 Feb 2017 09:44:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Merge-two-datasets-by-ID-and-date-range/m-p/329704#M73824</guid>
      <dc:creator>ari</dc:creator>
      <dc:date>2017-02-03T09:44:07Z</dc:date>
    </item>
    <item>
      <title>Re: Merge two datasets by ID and date range</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Merge-two-datasets-by-ID-and-date-range/m-p/329820#M73843</link>
      <description>&lt;P&gt;This warning indicates that your query didn't include a max or sum summary function. Please post the code that you ran.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 03 Feb 2017 16:00:55 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Merge-two-datasets-by-ID-and-date-range/m-p/329820#M73843</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2017-02-03T16:00:55Z</dc:date>
    </item>
  </channel>
</rss>

