<?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: Merging two interval datasets in SAS Data Management</title>
    <link>https://communities.sas.com/t5/SAS-Data-Management/Merging-two-interval-datasets/m-p/444422#M13712</link>
    <description>&lt;P&gt;These tend to be really hard.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The best way I've found to approach them is to lengthen both datasets by creating one record for every unit of "Start-End". So for example, your first A record of:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;ID Year Start End Type&lt;BR /&gt;1 2000 5000 5055 A&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;would become 56 records looking like this:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;ID Year SE Type&lt;BR /&gt;1 2000 5000 A&lt;BR /&gt;1 2000 5001 A&lt;BR /&gt;1 2000 5002 A&lt;BR /&gt;1 2000 5053 A&lt;BR /&gt;1 2000 5054 A&lt;BR /&gt;1 2000 5055 A&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Once that's done, it's very simple to merge on ID, Year, and SE, and if there's a B record Type becomes B, otherwise it's A.&lt;/P&gt;
&lt;P&gt;Then a fairly simple data step can reconsolidate them.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The problem, of course, is that depending on your data volumes this will absolutely explode your file size. If the volumes aren't too bad, though, this is conceptually simple and works well.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Tom&lt;/P&gt;</description>
    <pubDate>Sat, 10 Mar 2018 17:59:18 GMT</pubDate>
    <dc:creator>TomKari</dc:creator>
    <dc:date>2018-03-10T17:59:18Z</dc:date>
    <item>
      <title>Merging two interval datasets</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/Merging-two-interval-datasets/m-p/444390#M13711</link>
      <description>&lt;P&gt;Hello&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;I am stuck with a problem where i have to merge together two datasets. Both datasets contains a year variable and a ID variable. Furthermre&amp;nbsp;Dataset A contains a Start and a End variable and Dataset B contains also a Start and End variable.&lt;BR /&gt;&lt;BR /&gt;Dataset A:&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; Dataset B&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;ID&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Year&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Start&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; End&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Type&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;ID&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Year&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Start&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;END&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Type&lt;/P&gt;&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2000&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;5000&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 5055&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; A&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2000&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 5025&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 5100&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;B&lt;/P&gt;&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2000&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;5125&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 5365&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; A&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2000&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;5200&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 5300&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;B&lt;/P&gt;&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2001&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;5366&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 5600&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; A&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2001&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 5500&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 5800&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; B&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Okay, so B is more "powerfull" than A, and this one takes over for A if there are some overlaps, and i should therefor end out with something like:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;ID&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Year&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Start&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; End&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Type&lt;/P&gt;&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2000&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;5000&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 5024&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; A&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2000&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;5025&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;5100&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;B&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/P&gt;&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2000&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;5125&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 5199&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;A&lt;/P&gt;&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2000&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;5200&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;5300&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;B&lt;/P&gt;&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2000&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;5301&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;5365&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;A&lt;/P&gt;&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2001&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;5366&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;5599&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;A&lt;/P&gt;&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2001&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;5600&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;5800&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; B&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I was thinking about doing a&amp;nbsp;PROC SQL join, and then find some patterns, but i can't really do that (or i am not smart enough)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Hope there is someone who can help.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 10 Mar 2018 14:40:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/Merging-two-interval-datasets/m-p/444390#M13711</guid>
      <dc:creator>malt0668</dc:creator>
      <dc:date>2018-03-10T14:40:26Z</dc:date>
    </item>
    <item>
      <title>Re: Merging two interval datasets</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/Merging-two-interval-datasets/m-p/444422#M13712</link>
      <description>&lt;P&gt;These tend to be really hard.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The best way I've found to approach them is to lengthen both datasets by creating one record for every unit of "Start-End". So for example, your first A record of:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;ID Year Start End Type&lt;BR /&gt;1 2000 5000 5055 A&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;would become 56 records looking like this:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;ID Year SE Type&lt;BR /&gt;1 2000 5000 A&lt;BR /&gt;1 2000 5001 A&lt;BR /&gt;1 2000 5002 A&lt;BR /&gt;1 2000 5053 A&lt;BR /&gt;1 2000 5054 A&lt;BR /&gt;1 2000 5055 A&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Once that's done, it's very simple to merge on ID, Year, and SE, and if there's a B record Type becomes B, otherwise it's A.&lt;/P&gt;
&lt;P&gt;Then a fairly simple data step can reconsolidate them.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The problem, of course, is that depending on your data volumes this will absolutely explode your file size. If the volumes aren't too bad, though, this is conceptually simple and works well.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Tom&lt;/P&gt;</description>
      <pubDate>Sat, 10 Mar 2018 17:59:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/Merging-two-interval-datasets/m-p/444422#M13712</guid>
      <dc:creator>TomKari</dc:creator>
      <dc:date>2018-03-10T17:59:18Z</dc:date>
    </item>
    <item>
      <title>Re: Merging two interval datasets</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/Merging-two-interval-datasets/m-p/444426#M13713</link>
      <description>&lt;P&gt;Thanks for the answer, but unfortunately there is roughly 68 million observations in each dataset, so length them would be quite tough for the size of the file .&lt;/P&gt;</description>
      <pubDate>Sat, 10 Mar 2018 18:30:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/Merging-two-interval-datasets/m-p/444426#M13713</guid>
      <dc:creator>malt0668</dc:creator>
      <dc:date>2018-03-10T18:30:25Z</dc:date>
    </item>
    <item>
      <title>Re: Merging two interval datasets</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/Merging-two-interval-datasets/m-p/444518#M13715</link>
      <description>&lt;P&gt;Under certain conditions, you can do this operation with arrays. Are &lt;STRONG&gt;start&lt;/STRONG&gt;&amp;nbsp;and &lt;STRONG&gt;end&lt;/STRONG&gt; always integers? What are their min and max possible values?&lt;/P&gt;</description>
      <pubDate>Sun, 11 Mar 2018 20:38:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/Merging-two-interval-datasets/m-p/444518#M13715</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2018-03-11T20:38:39Z</dc:date>
    </item>
    <item>
      <title>Re: Merging two interval datasets</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/Merging-two-interval-datasets/m-p/444521#M13716</link>
      <description>&lt;P&gt;You could for example do:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data C;
array x(10000) $1;
do until (last.year);
    set A B;
    by id year;
    do i = start to end;
        x{i} = type;
        end;
    end;
start = 1;
do i = 2 to dim(x);
    if x{i} ne x{i-1} then do;
        type = x{i-1};
        end = i-1;
        if type in ("A", "B") then output;
        start = i;
        end;
    end;
keep id year start end type;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;if start and end are ointegers always within the range 2-9999.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sun, 11 Mar 2018 05:26:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/Merging-two-interval-datasets/m-p/444521#M13716</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2018-03-11T05:26:37Z</dc:date>
    </item>
    <item>
      <title>Re: Merging two interval datasets</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/Merging-two-interval-datasets/m-p/444538#M13717</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data A;
input ID       Year        Start        End            Type $;
cards; 
1         2000       5000        5055                A         
1         2000       5125        5365                A         
1         2001       5366        5600                A     
;
run;

 

data B;
input ID       Year        Start        End       Type $;
cards;
 1            2000        5025        5100           B
 1          2000         5200        5300             B
 1           2001        5500        5800              B
;
run;
data tempA;
 set a;
 do date=start to end;
  output;
 end;
 drop start end;
run;
data tempB;
 set b;
 do date=start to end;
  output;
 end;
 drop start end;
run;
data temp;
 merge tempA tempB(rename=(type=_type));
 by id year date;
  new_type=coalescec(_type,type);
run;
data temp;
 set temp;
 by id year new_type notsorted;
 if first.new_type then group+1;
run;
data want;
 set temp;
 by group;
 retain start;
 if first.group then start=date;
 if last.group then do;end=date;output;end;
 drop date group type _type;
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Sun, 11 Mar 2018 11:00:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/Merging-two-interval-datasets/m-p/444538#M13717</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2018-03-11T11:00:01Z</dc:date>
    </item>
  </channel>
</rss>

