<?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 combining overlap date ranges based on the effective run dates and keeping non continous intervals in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/combining-overlap-date-ranges-based-on-the-effective-run-dates/m-p/614444#M179620</link>
    <description>&lt;P&gt;Hi&lt;/P&gt;&lt;P&gt;Data set:&lt;BR /&gt;I have a data set with variables as&lt;BR /&gt;ID agent_id drug_code beg_date end_date effective_run_date&lt;/P&gt;&lt;P&gt;I want to combine the date ranges if rows have same id, agent_id,drug_code without any gaps between beg_date and end_dates of next rows with same data variables with bringing the max effective run date.&lt;/P&gt;&lt;PRE class="lang-sql prettyprint prettyprinted"&gt;&lt;CODE&gt;&lt;SPAN class="pln"&gt;Scenario &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;:&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;                                                 
ID   agent_id drug_code beg_date    end_date    effective_run_date                                      &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A1  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;100&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;    &lt;SPAN class="lit"&gt;12&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;12&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;                               
&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A1  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;100&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;10&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;                                
&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A2  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;100&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;    &lt;SPAN class="lit"&gt;5&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;4&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;                                
&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A2  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;100&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;2&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;    &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;                                
&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A2  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;200&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;4&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;    &lt;SPAN class="lit"&gt;12&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;12&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;                               
&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A2  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;200&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;    &lt;SPAN class="lit"&gt;5&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;5&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;  &lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;Expected data for scenario 1:&lt;/P&gt;&lt;PRE class="lang-sql prettyprint prettyprinted"&gt;&lt;CODE&gt;&lt;SPAN class="pln"&gt;ID  agent_id  drug_code beg_date    end_date    effective_run_date                                      &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A1  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;100&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;    &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;                                
&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A2  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;100&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;    &lt;SPAN class="lit"&gt;5&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;4&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;                                
&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A2  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;200&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;4&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;    &lt;SPAN class="lit"&gt;12&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;12&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;                               
&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A2  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;200&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;    &lt;SPAN class="lit"&gt;5&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;5&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;    &lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;which I achieved successfully for scenario 1&lt;/P&gt;&lt;P&gt;Scenario 2:&lt;BR /&gt;From here the scenarios are tricky since we have same ID,Agent_ID can have enrolled for different drug_codes and we want to keep all the unique records based on the latest effective run dates:&lt;/P&gt;&lt;P&gt;Scenarios 2.1:&lt;/P&gt;&lt;PRE class="lang-sql prettyprint prettyprinted"&gt;&lt;CODE&gt;&lt;SPAN class="pln"&gt;ID  agent_id drug_code  beg_date    end_date    effective_run_date                                      &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A3  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;100&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;    &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;                                
&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A3  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;200&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;    &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;In the above case we have two different drug_codes but with same beg_date and end_date but different effective date. In this case I want to remove the first record since the effective date is not the latest.&lt;/P&gt;&lt;P&gt;Expected data for scenario 2.1:&lt;/P&gt;&lt;PRE class="lang-sql prettyprint prettyprinted"&gt;&lt;CODE&gt;&lt;SPAN class="pln"&gt;ID  agent_id drug_code  beg_date    end_date    effective_run_date                                      &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A3  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;200&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;    &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;Scenarios 2.2:&lt;/P&gt;&lt;PRE class="lang-sql prettyprint prettyprinted"&gt;&lt;CODE&gt;&lt;SPAN class="pln"&gt;ID agent_id  drug_code  beg_date    end_date    effective_run_date                                      &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A4  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;301&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;    &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;                                
&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A4  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;302&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;2&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;    &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;In the above case we have same id and different drug_code and also the beg_dates are not same, in this scenario I do not want to delete first record since it has one month which is unique. I want to change the end_date of the first record (next record beg_date -1 ) when the effective_run_date is not latest.&lt;/P&gt;&lt;P&gt;Expected data for scenario 2.2:&lt;/P&gt;&lt;PRE class="lang-sql prettyprint prettyprinted"&gt;&lt;CODE&gt;&lt;SPAN class="pln"&gt;ID agent_id  drug_code  beg_date    end_date    effective_run_date                                      &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A4  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;301&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;    &lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;                                
&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A4  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;302&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;2&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;    &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;Scenarios 2.3:&lt;/P&gt;&lt;PRE class="lang-sql prettyprint prettyprinted"&gt;&lt;CODE&gt;&lt;SPAN class="pln"&gt;ID agent_id  drug_code  beg_date    end_date    effective_run_date                                      &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A5  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;450&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;2&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;    &lt;SPAN class="lit"&gt;5&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;2&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;                                
&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A5  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;459&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;11&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;5&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;2&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;    &lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;In the above case, as we have two drug_codes with different date ranges but same effective_run_date then I want to have my date range of first record to split based on the overlap date range.&lt;/P&gt;&lt;P&gt;Expected data for scenario 2.3:&lt;/P&gt;&lt;PRE class="lang-sql prettyprint prettyprinted"&gt;&lt;CODE&gt;&lt;SPAN class="pln"&gt;ID agent_id  drug_code  beg_date    end_date    effective_run_date                                      &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A5  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;459&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;2&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;    &lt;SPAN class="lit"&gt;10&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;                               
&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A5  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;459&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;11&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;                               
&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A5  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;450&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;11&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;Actual data have more than two drug_codes and millions of records in the source data set. I couldn't achieve the scenario 2.1,2.2,2.3.&amp;nbsp; Any help will be greatly appreciable.&lt;/P&gt;</description>
    <pubDate>Mon, 06 Jan 2020 14:55:02 GMT</pubDate>
    <dc:creator>sri21592</dc:creator>
    <dc:date>2020-01-06T14:55:02Z</dc:date>
    <item>
      <title>combining overlap date ranges based on the effective run dates and keeping non continous intervals</title>
      <link>https://communities.sas.com/t5/SAS-Programming/combining-overlap-date-ranges-based-on-the-effective-run-dates/m-p/614444#M179620</link>
      <description>&lt;P&gt;Hi&lt;/P&gt;&lt;P&gt;Data set:&lt;BR /&gt;I have a data set with variables as&lt;BR /&gt;ID agent_id drug_code beg_date end_date effective_run_date&lt;/P&gt;&lt;P&gt;I want to combine the date ranges if rows have same id, agent_id,drug_code without any gaps between beg_date and end_dates of next rows with same data variables with bringing the max effective run date.&lt;/P&gt;&lt;PRE class="lang-sql prettyprint prettyprinted"&gt;&lt;CODE&gt;&lt;SPAN class="pln"&gt;Scenario &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;:&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;                                                 
ID   agent_id drug_code beg_date    end_date    effective_run_date                                      &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A1  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;100&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;    &lt;SPAN class="lit"&gt;12&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;12&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;                               
&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A1  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;100&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;10&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;                                
&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A2  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;100&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;    &lt;SPAN class="lit"&gt;5&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;4&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;                                
&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A2  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;100&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;2&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;    &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;                                
&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A2  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;200&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;4&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;    &lt;SPAN class="lit"&gt;12&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;12&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;                               
&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A2  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;200&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;    &lt;SPAN class="lit"&gt;5&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;5&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;  &lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;Expected data for scenario 1:&lt;/P&gt;&lt;PRE class="lang-sql prettyprint prettyprinted"&gt;&lt;CODE&gt;&lt;SPAN class="pln"&gt;ID  agent_id  drug_code beg_date    end_date    effective_run_date                                      &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A1  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;100&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;    &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;                                
&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A2  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;100&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;    &lt;SPAN class="lit"&gt;5&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;4&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;                                
&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A2  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;200&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;4&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;    &lt;SPAN class="lit"&gt;12&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;12&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;                               
&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A2  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;200&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;    &lt;SPAN class="lit"&gt;5&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;5&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;    &lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;which I achieved successfully for scenario 1&lt;/P&gt;&lt;P&gt;Scenario 2:&lt;BR /&gt;From here the scenarios are tricky since we have same ID,Agent_ID can have enrolled for different drug_codes and we want to keep all the unique records based on the latest effective run dates:&lt;/P&gt;&lt;P&gt;Scenarios 2.1:&lt;/P&gt;&lt;PRE class="lang-sql prettyprint prettyprinted"&gt;&lt;CODE&gt;&lt;SPAN class="pln"&gt;ID  agent_id drug_code  beg_date    end_date    effective_run_date                                      &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A3  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;100&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;    &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;                                
&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A3  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;200&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;    &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;In the above case we have two different drug_codes but with same beg_date and end_date but different effective date. In this case I want to remove the first record since the effective date is not the latest.&lt;/P&gt;&lt;P&gt;Expected data for scenario 2.1:&lt;/P&gt;&lt;PRE class="lang-sql prettyprint prettyprinted"&gt;&lt;CODE&gt;&lt;SPAN class="pln"&gt;ID  agent_id drug_code  beg_date    end_date    effective_run_date                                      &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A3  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;200&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;    &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;Scenarios 2.2:&lt;/P&gt;&lt;PRE class="lang-sql prettyprint prettyprinted"&gt;&lt;CODE&gt;&lt;SPAN class="pln"&gt;ID agent_id  drug_code  beg_date    end_date    effective_run_date                                      &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A4  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;301&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;    &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;                                
&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A4  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;302&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;2&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;    &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;In the above case we have same id and different drug_code and also the beg_dates are not same, in this scenario I do not want to delete first record since it has one month which is unique. I want to change the end_date of the first record (next record beg_date -1 ) when the effective_run_date is not latest.&lt;/P&gt;&lt;P&gt;Expected data for scenario 2.2:&lt;/P&gt;&lt;PRE class="lang-sql prettyprint prettyprinted"&gt;&lt;CODE&gt;&lt;SPAN class="pln"&gt;ID agent_id  drug_code  beg_date    end_date    effective_run_date                                      &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A4  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;301&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;    &lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;                                
&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A4  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;302&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;2&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;    &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;Scenarios 2.3:&lt;/P&gt;&lt;PRE class="lang-sql prettyprint prettyprinted"&gt;&lt;CODE&gt;&lt;SPAN class="pln"&gt;ID agent_id  drug_code  beg_date    end_date    effective_run_date                                      &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A5  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;450&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;2&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;    &lt;SPAN class="lit"&gt;5&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;2&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;                                
&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A5  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;459&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;11&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;5&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;2&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;    &lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;In the above case, as we have two drug_codes with different date ranges but same effective_run_date then I want to have my date range of first record to split based on the overlap date range.&lt;/P&gt;&lt;P&gt;Expected data for scenario 2.3:&lt;/P&gt;&lt;PRE class="lang-sql prettyprint prettyprinted"&gt;&lt;CODE&gt;&lt;SPAN class="pln"&gt;ID agent_id  drug_code  beg_date    end_date    effective_run_date                                      &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A5  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;459&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;2&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;    &lt;SPAN class="lit"&gt;10&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;  &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;                               
&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A5  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;459&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;11&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;                               
&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pln"&gt;   A5  &lt;/SPAN&gt;&lt;SPAN class="lit"&gt;450&lt;/SPAN&gt; &lt;SPAN class="lit"&gt;11&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;1&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2018&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;SPAN class="lit"&gt;3&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;31&lt;/SPAN&gt;&lt;SPAN class="pun"&gt;/&lt;/SPAN&gt;&lt;SPAN class="lit"&gt;2019&lt;/SPAN&gt;   &lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;Actual data have more than two drug_codes and millions of records in the source data set. I couldn't achieve the scenario 2.1,2.2,2.3.&amp;nbsp; Any help will be greatly appreciable.&lt;/P&gt;</description>
      <pubDate>Mon, 06 Jan 2020 14:55:02 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/combining-overlap-date-ranges-based-on-the-effective-run-dates/m-p/614444#M179620</guid>
      <dc:creator>sri21592</dc:creator>
      <dc:date>2020-01-06T14:55:02Z</dc:date>
    </item>
    <item>
      <title>Re: combining overlap date ranges based on the effective run dates and keeping non continous interva</title>
      <link>https://communities.sas.com/t5/SAS-Programming/combining-overlap-date-ranges-based-on-the-effective-run-dates/m-p/614445#M179621</link>
      <description>code for Scenario 1:&lt;BR /&gt;&lt;BR /&gt;Code for scenario 1: (which I achieved exactly as I wanted)&lt;BR /&gt;data WORK.new_end_dates_v1 (drop=id2 drug_code2&lt;BR /&gt;rename=(beg2=beg_dos&lt;BR /&gt;end2=end_dos&lt;BR /&gt;edbc2=edbc_dos));&lt;BR /&gt;set WORK.sort;&lt;BR /&gt;retain beg2 end2 edbc2;&lt;BR /&gt;agent_id2=lag1(agent_id);&lt;BR /&gt;id2=lag1(id);&lt;BR /&gt;drug_code2=lag1(drug_code);&lt;BR /&gt;&lt;BR /&gt;if agent_id2=agent_id and id2=id and drug_code2=drug_code and beg_date le(end2+1) then&lt;BR /&gt;do;&lt;BR /&gt;beg2=min(beg_date,beg2);&lt;BR /&gt;end2=max(end_date,end2);&lt;BR /&gt;edbc2=max(edbc_run_date,edbc2);&lt;BR /&gt;end;&lt;BR /&gt;else&lt;BR /&gt;do;&lt;BR /&gt;seg+1;&lt;BR /&gt;beg2=beg_date;&lt;BR /&gt;end2=end_date;&lt;BR /&gt;edbc2=edbc_run_date;&lt;BR /&gt;end;&lt;BR /&gt;&lt;BR /&gt;format beg2 end2 edbc_run_date mmddyy10.;&lt;BR /&gt;run;&lt;BR /&gt;&lt;BR /&gt;data WORK.new_end_dates_v2(drop=agent_id2 seg beg_dos end_dos edbc_dos);&lt;BR /&gt;retain beg_date end_date edbc_run_date;&lt;BR /&gt;set WORK.new_end_dates_v1;&lt;BR /&gt;by agent_id id seg;&lt;BR /&gt;format beg_date end_date mmddyy10.;&lt;BR /&gt;&lt;BR /&gt;if first.seg then&lt;BR /&gt;do;&lt;BR /&gt;end;&lt;BR /&gt;if last.seg then&lt;BR /&gt;do;&lt;BR /&gt;beg_date = beg_dos;&lt;BR /&gt;end_date = end_dos;&lt;BR /&gt;edbc_run_date = edbc_dos;&lt;BR /&gt;output;&lt;BR /&gt;end;&lt;BR /&gt;run;&lt;BR /&gt;</description>
      <pubDate>Mon, 30 Dec 2019 18:38:09 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/combining-overlap-date-ranges-based-on-the-effective-run-dates/m-p/614445#M179621</guid>
      <dc:creator>sri21592</dc:creator>
      <dc:date>2019-12-30T18:38:09Z</dc:date>
    </item>
    <item>
      <title>Re: combining overlap date ranges based on the effective run dates and keeping non continous interva</title>
      <link>https://communities.sas.com/t5/SAS-Programming/combining-overlap-date-ranges-based-on-the-effective-run-dates/m-p/614535#M179669</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/295843"&gt;@sri21592&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;here is my attempt to handle the different scenarios:&lt;/P&gt;
&lt;P&gt;could you please provide more sample data for scenarios 2.2 and 2.3 as the ones you provided do not reflect the use cases. Thank you!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;/* Scenario 1 */

data have;
	input ID agent_id $ drug_code beg_date:MMDDYY10. end_date:MMDDYY10. effective_run_date:MMDDYY10.;
	format beg_date end_date effective_run_date MMDDYY10.;
	datalines;
1 A1 100 1/1/2018 12/31/2018 12/1/2018
1 A1 100 1/10/2018 3/31/2019 3/1/2019
1 A2 100 1/1/2018 5/31/2018 4/1/2018
1 A2 100 2/1/2018 3/31/2018 3/1/2018
1 A2 200 4/1/2018 12/31/2018 12/1/2018
1 A2 200 1/2/2019 5/31/2019 5/1/2019
1 A3 100 1/1/2018 3/31/2019 3/14/2019
1 A3 200 1/1/2018 3/31/2019 3/15/2019
;
run;

proc sort data=have;
	by ID agent_id drug_code beg_date;
run;

data have_case1;
	set have;
	by ID agent_id drug_code;
	format _lag MMDDYY10.;
	_lag = lag(end_date);
	if first.drug_code then _lag=0;
	if _lag &amp;lt; beg_date then flag + 1; /* put _lag + 1 if you want to consider 2 consecutive days as no discontinuation */
	drop _lag;
run;

proc sql;
	create table handle_case1 as
	select ID, agent_id, drug_code,
		   min(beg_date) as beg_date format = MMDDYY10.,
		   max(end_date) as end_date format = MMDDYY10.,
		   max(effective_run_date) as effective_run_date format = MMDDYY10.
	from have_case1
	group by ID, agent_id, drug_code, flag;
quit;

/* Scenario 2 */

	/* Scenario 2.1 */

proc sql;
	create table handle_case2_1 as
	select *
	from handle_case1
	group by ID, agent_id, beg_date, end_date
	having effective_run_date = max(effective_run_date);
quit;

	/* Scenario 2.2 */
	/* same id */
	/* different drug_code */
	/* different beg_dates */

		/* Need sample data + desired output*/
		
	
	/* Scenario 2.3 */
	/* same id */
	/* different drug_code */
	/* different beg_dates and end_dates */
	/* same effective_run_date */

		/* Need sample data + desired output*/&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 31 Dec 2019 10:22:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/combining-overlap-date-ranges-based-on-the-effective-run-dates/m-p/614535#M179669</guid>
      <dc:creator>ed_sas_member</dc:creator>
      <dc:date>2019-12-31T10:22:48Z</dc:date>
    </item>
    <item>
      <title>Re: combining overlap date ranges based on the effective run dates and keeping non continous interva</title>
      <link>https://communities.sas.com/t5/SAS-Programming/combining-overlap-date-ranges-based-on-the-effective-run-dates/m-p/614559#M179685</link>
      <description>&lt;P&gt;Hi &lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/292097"&gt;@ed_sas_member&lt;/a&gt;,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks for the quick response and trying to help me. Greatly appreciated. Here is the actual data set for combined scenarios 2.1,2.2 and 2.3 together.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Data set for scenarios - 2.1,2.2 and 2.3:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;agent_id&lt;/TD&gt;&lt;TD&gt;drug_code&lt;/TD&gt;&lt;TD&gt;beg_date&lt;/TD&gt;&lt;TD&gt;end_date&lt;/TD&gt;&lt;TD&gt;effective_run_date&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;11&lt;/TD&gt;&lt;TD&gt;450&lt;/TD&gt;&lt;TD&gt;BC&lt;/TD&gt;&lt;TD&gt;11/1/2016&lt;/TD&gt;&lt;TD&gt;12/31/2016&lt;/TD&gt;&lt;TD&gt;11/2/2016&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;11&lt;/TD&gt;&lt;TD&gt;450&lt;/TD&gt;&lt;TD&gt;BD&lt;/TD&gt;&lt;TD&gt;11/1/2016&lt;/TD&gt;&lt;TD&gt;12/31/2016&lt;/TD&gt;&lt;TD&gt;12/2/2016&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;580&lt;/TD&gt;&lt;TD&gt;A1&lt;/TD&gt;&lt;TD&gt;1/1/2014&lt;/TD&gt;&lt;TD&gt;5/31/2018&lt;/TD&gt;&lt;TD&gt;8/29/2014&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;580&lt;/TD&gt;&lt;TD&gt;586&lt;/TD&gt;&lt;TD&gt;11/1/2017&lt;/TD&gt;&lt;TD&gt;11/30/2017&lt;/TD&gt;&lt;TD&gt;5/7/2018&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;580&lt;/TD&gt;&lt;TD&gt;567&lt;/TD&gt;&lt;TD&gt;12/1/2017&lt;/TD&gt;&lt;TD&gt;10/31/2018&lt;/TD&gt;&lt;TD&gt;5/7/2018&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;757&lt;/TD&gt;&lt;TD&gt;O1&lt;/TD&gt;&lt;TD&gt;8/1/2017&lt;/TD&gt;&lt;TD&gt;1/31/2019&lt;/TD&gt;&lt;TD&gt;6/26/2017&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;757&lt;/TD&gt;&lt;TD&gt;P1&lt;/TD&gt;&lt;TD&gt;8/1/2018&lt;/TD&gt;&lt;TD&gt;8/31/2018&lt;/TD&gt;&lt;TD&gt;8/3/2018&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;999&lt;/TD&gt;&lt;TD&gt;P1&lt;/TD&gt;&lt;TD&gt;9/1/2015&lt;/TD&gt;&lt;TD&gt;11/30/2016&lt;/TD&gt;&lt;TD&gt;10/20/2015&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;999&lt;/TD&gt;&lt;TD&gt;E1&lt;/TD&gt;&lt;TD&gt;10/1/2015&lt;/TD&gt;&lt;TD&gt;11/30/2015&lt;/TD&gt;&lt;TD&gt;10/20/2015&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;686&lt;/TD&gt;&lt;TD&gt;AL&lt;/TD&gt;&lt;TD&gt;1/1/2016&lt;/TD&gt;&lt;TD&gt;8/31/2016&lt;/TD&gt;&lt;TD&gt;1/4/2016&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;686&lt;/TD&gt;&lt;TD&gt;BL&lt;/TD&gt;&lt;TD&gt;6/1/2016&lt;/TD&gt;&lt;TD&gt;6/30/2016&lt;/TD&gt;&lt;TD&gt;1/23/2017&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;686&lt;/TD&gt;&lt;TD&gt;779&lt;/TD&gt;&lt;TD&gt;8/1/2016&lt;/TD&gt;&lt;TD&gt;8/31/2016&lt;/TD&gt;&lt;TD&gt;1/26/2017&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;686&lt;/TD&gt;&lt;TD&gt;775&lt;/TD&gt;&lt;TD&gt;8/1/2016&lt;/TD&gt;&lt;TD&gt;1/31/2017&lt;/TD&gt;&lt;TD&gt;1/12/2017&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;686&lt;/TD&gt;&lt;TD&gt;779&lt;/TD&gt;&lt;TD&gt;10/1/2016&lt;/TD&gt;&lt;TD&gt;1/31/2017&lt;/TD&gt;&lt;TD&gt;1/12/2017&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;9&lt;/TD&gt;&lt;TD&gt;99&lt;/TD&gt;&lt;TD&gt;BA&lt;/TD&gt;&lt;TD&gt;11/1/2015&lt;/TD&gt;&lt;TD&gt;12/31/2015&lt;/TD&gt;&lt;TD&gt;11/30/2015&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;9&lt;/TD&gt;&lt;TD&gt;99&lt;/TD&gt;&lt;TD&gt;CA&lt;/TD&gt;&lt;TD&gt;12/1/2015&lt;/TD&gt;&lt;TD&gt;12/31/2015&lt;/TD&gt;&lt;TD&gt;11/30/2015&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;699&lt;/TD&gt;&lt;TD&gt;F1&lt;/TD&gt;&lt;TD&gt;3/1/2015&lt;/TD&gt;&lt;TD&gt;12/31/2015&lt;/TD&gt;&lt;TD&gt;11/29/2016&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;699&lt;/TD&gt;&lt;TD&gt;BB&lt;/TD&gt;&lt;TD&gt;11/1/2015&lt;/TD&gt;&lt;TD&gt;3/31/2016&lt;/TD&gt;&lt;TD&gt;11/7/2016&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;P&gt;Expected results: (I included comments and scenario type)&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;agent_id&lt;/TD&gt;&lt;TD&gt;drug_code&lt;/TD&gt;&lt;TD&gt;beg_date&lt;/TD&gt;&lt;TD&gt;end_date&lt;/TD&gt;&lt;TD&gt;effective_run_date&lt;/TD&gt;&lt;TD&gt;comments&lt;/TD&gt;&lt;TD&gt;Scenario&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;11&lt;/TD&gt;&lt;TD&gt;450&lt;/TD&gt;&lt;TD&gt;BD&lt;/TD&gt;&lt;TD&gt;11/1/2016&lt;/TD&gt;&lt;TD&gt;12/31/2016&lt;/TD&gt;&lt;TD&gt;12/2/2016&lt;/TD&gt;&lt;TD&gt;I don’t want the first record since both records date ranges are same but effective date should be latest&lt;/TD&gt;&lt;TD&gt;Scenario 2.1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;580&lt;/TD&gt;&lt;TD&gt;A1&lt;/TD&gt;&lt;TD&gt;1/1/2014&lt;/TD&gt;&lt;TD&gt;10/31/2017&lt;/TD&gt;&lt;TD&gt;8/29/2014&lt;/TD&gt;&lt;TD&gt;(Changed the end date since the effective date is not latest compared to the other dates and I am not missing any unique months by changing the date).&lt;/TD&gt;&lt;TD&gt;Scenario 2.2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;580&lt;/TD&gt;&lt;TD&gt;586&lt;/TD&gt;&lt;TD&gt;11/1/2017&lt;/TD&gt;&lt;TD&gt;11/30/2017&lt;/TD&gt;&lt;TD&gt;5/7/2018&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;580&lt;/TD&gt;&lt;TD&gt;567&lt;/TD&gt;&lt;TD&gt;12/1/2017&lt;/TD&gt;&lt;TD&gt;10/31/2018&lt;/TD&gt;&lt;TD&gt;5/7/2018&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;757&lt;/TD&gt;&lt;TD&gt;O1&lt;/TD&gt;&lt;TD&gt;8/1/2017&lt;/TD&gt;&lt;TD&gt;7/31/2018&lt;/TD&gt;&lt;TD&gt;6/26/2017&lt;/TD&gt;&lt;TD&gt;I split the first record into two records since there is other reecord with one month with latest effective date. I am not losing any unique months again.&lt;/TD&gt;&lt;TD&gt;Scenario 2.2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;757&lt;/TD&gt;&lt;TD&gt;O1&lt;/TD&gt;&lt;TD&gt;9/1/2018&lt;/TD&gt;&lt;TD&gt;1/31/2019&lt;/TD&gt;&lt;TD&gt;6/26/2017&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;757&lt;/TD&gt;&lt;TD&gt;P1&lt;/TD&gt;&lt;TD&gt;8/1/2018&lt;/TD&gt;&lt;TD&gt;8/31/2018&lt;/TD&gt;&lt;TD&gt;8/3/2018&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;999&lt;/TD&gt;&lt;TD&gt;P1&lt;/TD&gt;&lt;TD&gt;9/1/2015&lt;/TD&gt;&lt;TD&gt;9/30/2015&lt;/TD&gt;&lt;TD&gt;10/20/2015&lt;/TD&gt;&lt;TD&gt;Here, when effective dates are same, I want to keep the overlap date ranges and split the non overlap months into three different records.&lt;/TD&gt;&lt;TD&gt;Scenario 2.3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;999&lt;/TD&gt;&lt;TD&gt;P1&lt;/TD&gt;&lt;TD&gt;10/1/2015&lt;/TD&gt;&lt;TD&gt;11/30/2015&lt;/TD&gt;&lt;TD&gt;10/20/2015&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;999&lt;/TD&gt;&lt;TD&gt;P1&lt;/TD&gt;&lt;TD&gt;12/1/2015&lt;/TD&gt;&lt;TD&gt;11/30/2016&lt;/TD&gt;&lt;TD&gt;10/20/2015&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;999&lt;/TD&gt;&lt;TD&gt;E1&lt;/TD&gt;&lt;TD&gt;10/1/2015&lt;/TD&gt;&lt;TD&gt;11/30/2015&lt;/TD&gt;&lt;TD&gt;10/20/2015&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;686&lt;/TD&gt;&lt;TD&gt;AL&lt;/TD&gt;&lt;TD&gt;1/1/2016&lt;/TD&gt;&lt;TD&gt;5/31/2016&lt;/TD&gt;&lt;TD&gt;1/4/2016&lt;/TD&gt;&lt;TD&gt;you can this case is three scenarios combines, first looking if they have same date ranges and removing the non latest effective date, changing the end dates based on the effective run dates keeping all the month date ranges and finally scenario 2.3 splitting the date ranges when they have same effective date ranges.&lt;/TD&gt;&lt;TD&gt;combined scenarios 2.1,2.2 and 2.3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;686&lt;/TD&gt;&lt;TD&gt;AL&lt;/TD&gt;&lt;TD&gt;7/1/2016&lt;/TD&gt;&lt;TD&gt;7/31/2016&lt;/TD&gt;&lt;TD&gt;1/4/2016&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;686&lt;/TD&gt;&lt;TD&gt;BL&lt;/TD&gt;&lt;TD&gt;6/1/2016&lt;/TD&gt;&lt;TD&gt;6/30/2016&lt;/TD&gt;&lt;TD&gt;1/23/2017&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;686&lt;/TD&gt;&lt;TD&gt;779&lt;/TD&gt;&lt;TD&gt;8/1/2016&lt;/TD&gt;&lt;TD&gt;8/31/2016&lt;/TD&gt;&lt;TD&gt;1/26/2017&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;686&lt;/TD&gt;&lt;TD&gt;775&lt;/TD&gt;&lt;TD&gt;9/1/2016&lt;/TD&gt;&lt;TD&gt;9/30/2017&lt;/TD&gt;&lt;TD&gt;1/12/2017&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;686&lt;/TD&gt;&lt;TD&gt;775&lt;/TD&gt;&lt;TD&gt;10/1/2016&lt;/TD&gt;&lt;TD&gt;1/31/2017&lt;/TD&gt;&lt;TD&gt;1/12/2017&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;686&lt;/TD&gt;&lt;TD&gt;779&lt;/TD&gt;&lt;TD&gt;10/1/2016&lt;/TD&gt;&lt;TD&gt;1/31/2017&lt;/TD&gt;&lt;TD&gt;1/12/2017&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;9&lt;/TD&gt;&lt;TD&gt;99&lt;/TD&gt;&lt;TD&gt;BA&lt;/TD&gt;&lt;TD&gt;11/1/2015&lt;/TD&gt;&lt;TD&gt;11/30/2015&lt;/TD&gt;&lt;TD&gt;11/30/2015&lt;/TD&gt;&lt;TD&gt;I am just splitting the first record into two date ranges since there is overlap and splitting non overlap date ranges since both have same effective run dates.&lt;/TD&gt;&lt;TD&gt;Scenario 2.3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;9&lt;/TD&gt;&lt;TD&gt;99&lt;/TD&gt;&lt;TD&gt;BA&lt;/TD&gt;&lt;TD&gt;12/1/2015&lt;/TD&gt;&lt;TD&gt;12/31/2015&lt;/TD&gt;&lt;TD&gt;11/30/2015&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;9&lt;/TD&gt;&lt;TD&gt;99&lt;/TD&gt;&lt;TD&gt;CA&lt;/TD&gt;&lt;TD&gt;12/1/2015&lt;/TD&gt;&lt;TD&gt;12/31/2015&lt;/TD&gt;&lt;TD&gt;11/30/2015&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;699&lt;/TD&gt;&lt;TD&gt;F1&lt;/TD&gt;&lt;TD&gt;3/1/2015&lt;/TD&gt;&lt;TD&gt;12/31/2015&lt;/TD&gt;&lt;TD&gt;11/29/2016&lt;/TD&gt;&lt;TD&gt;Here, second record date range is overlapped but since the effective run date is not latest, I changed it after the end date of the first record.&lt;/TD&gt;&lt;TD&gt;Scenario 2.2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;699&lt;/TD&gt;&lt;TD&gt;BB&lt;/TD&gt;&lt;TD&gt;1/1/2016&lt;/TD&gt;&lt;TD&gt;3/31/2016&lt;/TD&gt;&lt;TD&gt;11/7/2016&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
      <pubDate>Tue, 31 Dec 2019 15:08:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/combining-overlap-date-ranges-based-on-the-effective-run-dates/m-p/614559#M179685</guid>
      <dc:creator>sri21592</dc:creator>
      <dc:date>2019-12-31T15:08:07Z</dc:date>
    </item>
    <item>
      <title>Re: combining overlap date ranges based on the effective run dates and keeping non continous interva</title>
      <link>https://communities.sas.com/t5/SAS-Programming/combining-overlap-date-ranges-based-on-the-effective-run-dates/m-p/614598#M179710</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/295843"&gt;@sri21592&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thank you very much for providing those example. Very helpful +++&lt;/P&gt;
&lt;P&gt;Just a question: in case of overlapping dates (scenario 2.2 and 2.3), I don't understand why you want to loose information concerning drug intake :&lt;/P&gt;
&lt;P&gt;e.g. for patient 699 -&amp;gt; according to your logic, you will lose the drug intake of drug BB between &amp;nbsp;nov 2015 and dec 2015.&lt;/P&gt;
&lt;P&gt;why don't you split the dates but keep information such a F1, F1 + BB, F1 with the associated period for each combination.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Input&lt;/P&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;10&lt;/TD&gt;
&lt;TD&gt;699&lt;/TD&gt;
&lt;TD&gt;F1&lt;/TD&gt;
&lt;TD&gt;3/1/2015&lt;/TD&gt;
&lt;TD&gt;12/31/2015&lt;/TD&gt;
&lt;TD&gt;11/29/2016&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;10&lt;/TD&gt;
&lt;TD&gt;699&lt;/TD&gt;
&lt;TD&gt;BB&lt;/TD&gt;
&lt;TD&gt;11/1/2015&lt;/TD&gt;
&lt;TD&gt;3/31/2016&lt;/TD&gt;
&lt;TD&gt;11/7/2016&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Output:&lt;/P&gt;
&lt;TABLE&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD&gt;10&lt;/TD&gt;
&lt;TD&gt;699&lt;/TD&gt;
&lt;TD&gt;F1&lt;/TD&gt;
&lt;TD&gt;3/1/2015&lt;/TD&gt;
&lt;TD&gt;12/31/2015&lt;/TD&gt;
&lt;TD&gt;11/29/2016&lt;/TD&gt;
&lt;TD&gt;Here, second record date range is overlapped but since the effective run date is not latest, I changed it after the end date of the first record.&lt;/TD&gt;
&lt;TD&gt;Scenario 2.2&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;10&lt;/TD&gt;
&lt;TD&gt;699&lt;/TD&gt;
&lt;TD&gt;BB&lt;/TD&gt;
&lt;TD&gt;1/1/2016&lt;/TD&gt;
&lt;TD&gt;3/31/2016&lt;/TD&gt;
&lt;TD&gt;11/7/2016&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 31 Dec 2019 17:56:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/combining-overlap-date-ranges-based-on-the-effective-run-dates/m-p/614598#M179710</guid>
      <dc:creator>ed_sas_member</dc:creator>
      <dc:date>2019-12-31T17:56:07Z</dc:date>
    </item>
    <item>
      <title>Re: combining overlap date ranges based on the effective run dates and keeping non continous interva</title>
      <link>https://communities.sas.com/t5/SAS-Programming/combining-overlap-date-ranges-based-on-the-effective-run-dates/m-p/614605#M179716</link>
      <description>&lt;P&gt;Hi &lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/292097"&gt;@ed_sas_member&lt;/a&gt;&amp;nbsp;,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am not actually losing any information since that is a duplicate entry. They might have entered multiple entries for the different drug codes. They initially might have a drug code 'A' program but in between they might have shifted to new drug_code 'B' for few months and they might come back again to Drug code 'A' program. Effective run date tells us which is the latest entry in the system since those are updated after 6 months to 1 year of actual program enrollment dates.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;e.g. for patient 699 -&amp;gt; I&amp;nbsp;will lose the drug intake of drug BB between &amp;nbsp;nov 2015 and dec 2015, because same person cannot have more than more than one drug at same span. Nov and Dec 2015 are captured by the first record with latest entry date which means that the first record is true for nov and dec 15.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;you might have question on how can two drug codes can be at same effective date. (Current system captures the&amp;nbsp; date but not the timestamp for the entries, it might change in future but we have very less cases of same effective dates compared to millions of overlap date ranges).&lt;/P&gt;</description>
      <pubDate>Tue, 31 Dec 2019 18:17:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/combining-overlap-date-ranges-based-on-the-effective-run-dates/m-p/614605#M179716</guid>
      <dc:creator>sri21592</dc:creator>
      <dc:date>2019-12-31T18:17:45Z</dc:date>
    </item>
  </channel>
</rss>

