<?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: How do I collapse consecutive dates? in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/How-do-I-collapse-consecutive-dates/m-p/894966#M353534</link>
    <description>&lt;P&gt;That worked really well! Thank you for that. Can I utilize this same program with a dataset that has more than one &lt;EM&gt;&lt;STRONG&gt;client_id&lt;/STRONG&gt;&lt;/EM&gt; (hundreds)?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Example below only has 3 cleints (but 2 more than the first example):&amp;nbsp;&lt;STRONG&gt;4087673300&lt;/STRONG&gt;,&amp;nbsp;&lt;STRONG&gt;5265189100&lt;/STRONG&gt;, &amp;amp;&amp;nbsp;&lt;STRONG&gt;8646854600&lt;/STRONG&gt;.&lt;/P&gt;&lt;LI-CODE lang="sas"&gt;data have;
  input ID $ admit :date. client_id :$10. release :date. admitcount;
  format admit release date9.;
cards;
295815 13-Dec-22 8646854600  7-Jan-23 1
295936  7-Jan-23 8646854600  9-Jan-23 2
295950  9-Jan-23 8646854600 18-Jan-23 3
296219 21-Feb-23 8646854600 22-Feb-23 4
299130 26-Jun-23 8646854600 26-Jun-23 5
299132 26-Jun-23 8646854600  6-Jul-23 6
295815 13-Dec-22 5265189100  7-Jan-23 1
295936  7-Jan-23 5265189100  9-Jan-23 2
295950  9-Jan-23 5265189100 18-Jan-23 3
296219 21-Feb-23 5265189100 22-Feb-23 4
299130 26-Jun-23 5265189100 26-Jun-23 5
299132 26-Jun-23 5265189100  6-Jul-23 6
295815 13-Dec-22 4087673300  7-Jan-23 1
295936  7-Jan-23 4087673300  9-Jan-23 2
295950  9-Jan-23 4087673300 18-Jan-23 3
296219 21-Feb-23 4087673300 22-Feb-23 4
299130 26-Jun-23 4087673300 26-Jun-23 5
299132 26-Jun-23 4087673300  6-Jul-23 6
;&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Tue, 19 Sep 2023 19:08:53 GMT</pubDate>
    <dc:creator>amandav2107</dc:creator>
    <dc:date>2023-09-19T19:08:53Z</dc:date>
    <item>
      <title>How do I collapse consecutive dates?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-I-collapse-consecutive-dates/m-p/894172#M353209</link>
      <description>&lt;P&gt;&lt;SPAN&gt;Hi all,&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;I have a dataset with multiple dates of admission per person (client_id). In the example below of one client in my dataset, lines 1, 2, &amp;amp; 3 overlap with consecutive dates. Additionally, lines 5 &amp;amp;6 overlap. I'm looking to limit the dataset further to collapse the consecutive&amp;nbsp;dates.&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Obs&lt;/TD&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;admit&lt;/TD&gt;&lt;TD&gt;client_id&lt;/TD&gt;&lt;TD&gt;release&lt;/TD&gt;&lt;TD&gt;admitcount&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;295815&lt;/TD&gt;&lt;TD&gt;13-Dec-22&lt;/TD&gt;&lt;TD&gt;4087673300&lt;/TD&gt;&lt;TD&gt;7-Jan-23&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;295936&lt;/TD&gt;&lt;TD&gt;7-Jan-23&lt;/TD&gt;&lt;TD&gt;4087673300&lt;/TD&gt;&lt;TD&gt;9-Jan-23&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;295950&lt;/TD&gt;&lt;TD&gt;9-Jan-23&lt;/TD&gt;&lt;TD&gt;4087673300&lt;/TD&gt;&lt;TD&gt;18-Jan-23&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;296219&lt;/TD&gt;&lt;TD&gt;21-Feb-23&lt;/TD&gt;&lt;TD&gt;4087673300&lt;/TD&gt;&lt;TD&gt;22-Feb-23&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;299130&lt;/TD&gt;&lt;TD&gt;26-Jun-23&lt;/TD&gt;&lt;TD&gt;4087673300&lt;/TD&gt;&lt;TD&gt;26-Jun-23&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;299132&lt;/TD&gt;&lt;TD&gt;26-Jun-23&lt;/TD&gt;&lt;TD&gt;4087673300&lt;/TD&gt;&lt;TD&gt;6-Jul-23&lt;/TD&gt;&lt;TD&gt;6&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;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I tried using a do loop to sort through the consecutive dates and only keep the records that have actual admit dates.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=""&gt;proc sort data=morethanone; by client_id ID; run;

data want;
  set morethanone;
  by client_id ID;
  lag_enddate=lag(release);
  if not first.client_id then do;
    if admit-lag_enddate=0 then delete_flag=1;
  end;
  if delete_flag then delete;
  format lag_enddate date7.;
run;&lt;/CODE&gt;&lt;/PRE&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;admit&lt;/TD&gt;&lt;TD&gt;client_id&lt;/TD&gt;&lt;TD&gt;release&lt;/TD&gt;&lt;TD&gt;admitcount&lt;/TD&gt;&lt;TD&gt;lag_enddate&lt;/TD&gt;&lt;TD&gt;delete_flag&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;295815&lt;/TD&gt;&lt;TD&gt;13-Dec-22&lt;/TD&gt;&lt;TD&gt;4087673300&lt;/TD&gt;&lt;TD&gt;7-Jan-23&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;13-Feb-23&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;296219&lt;/TD&gt;&lt;TD&gt;21-Feb-23&lt;/TD&gt;&lt;TD&gt;4087673300&lt;/TD&gt;&lt;TD&gt;22-Feb-23&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;18-Jan-23&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;299130&lt;/TD&gt;&lt;TD&gt;26-Jun-23&lt;/TD&gt;&lt;TD&gt;4087673300&lt;/TD&gt;&lt;TD&gt;26-Jun-23&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;22-Feb-23&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The program kept the records I wanted but I would like the lag_enddate&amp;nbsp; to be the actual end date.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;What I want:&lt;/STRONG&gt;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;admit&lt;/TD&gt;&lt;TD&gt;client_id&lt;/TD&gt;&lt;TD&gt;release&lt;/TD&gt;&lt;TD&gt;admitcount&lt;/TD&gt;&lt;TD&gt;lag_enddate&lt;/TD&gt;&lt;TD&gt;delete_flag&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;295815&lt;/TD&gt;&lt;TD&gt;13-Dec-22&lt;/TD&gt;&lt;TD&gt;4087673300&lt;/TD&gt;&lt;TD&gt;7-Jan-23&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;18-Jan-23&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;296219&lt;/TD&gt;&lt;TD&gt;21-Feb-23&lt;/TD&gt;&lt;TD&gt;4087673300&lt;/TD&gt;&lt;TD&gt;22-Feb-23&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;22-Feb-23&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;299130&lt;/TD&gt;&lt;TD&gt;26-Jun-23&lt;/TD&gt;&lt;TD&gt;4087673300&lt;/TD&gt;&lt;TD&gt;26-Jun-23&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;6-Jul-23&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Please help! Tell me what I'm doing wrong.&lt;/P&gt;</description>
      <pubDate>Wed, 13 Sep 2023 20:22:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-I-collapse-consecutive-dates/m-p/894172#M353209</guid>
      <dc:creator>amandav2107</dc:creator>
      <dc:date>2023-09-13T20:22:03Z</dc:date>
    </item>
    <item>
      <title>Re: How do I collapse consecutive dates?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-I-collapse-consecutive-dates/m-p/894178#M353210</link>
      <description>&lt;P&gt;You don't need a DO group here.&amp;nbsp; Judicious use of lag values and first.client_id inside an IFN function is is all you need to see the information you need.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data morethanone;
  input
  ID       admit :date9.	client_id	release :date9.	admitcount;
  format admit release date9. ;
datalines;
295815	13-Dec-22	4087673300	7-Jan-23	1
295936	7-Jan-23	4087673300	9-Jan-23	2
295950	9-Jan-23	4087673300	18-Jan-23	3
296219	21-Feb-23	4087673300	22-Feb-23	4
299130	26-Jun-23	4087673300	26-Jun-23	5
299132	26-Jun-23	4087673300	6-Jul-23	6
run;

data want ;
  set morethanone;
  by client_id id ;
  lag_enddate=ifn(first.client_id,admit,lag(release));
  if first.client_id=1 or admit-1 &amp;gt; lag_enddate;
  format lag_enddate date9.;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;I presume for the first record for a given client_id, you want ADMIT as the lag_enddate value.&lt;/P&gt;</description>
      <pubDate>Wed, 13 Sep 2023 20:55:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-I-collapse-consecutive-dates/m-p/894178#M353210</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2023-09-13T20:55:48Z</dc:date>
    </item>
    <item>
      <title>Re: How do I collapse consecutive dates?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-I-collapse-consecutive-dates/m-p/894775#M353456</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/31461"&gt;@mkeintz&lt;/a&gt;&amp;nbsp;thanks for your help! Not quite what I was looking for. This particular client has been admitted to the facility for a&amp;nbsp;&lt;STRONG&gt;true&amp;nbsp;&lt;/STRONG&gt;total of&amp;nbsp;&lt;STRONG&gt;3 times&amp;nbsp;&lt;/STRONG&gt;even though the data shows it as 6 admits.&amp;nbsp; There are instances where he was released and admitted the same day, but it should not be treated as two separte admits, rather one string of days. Ultimately, I want to collapse/limit the data so I get those three date ranges below and do anaverage length of stay.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;First admit&lt;/STRONG&gt;: 13DEC22 - 18JAN23&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Second admit&lt;/STRONG&gt;: 21FEB23 - 22FEB23&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Third admit&lt;/STRONG&gt;: 26JUN23 - 06JUL23&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;If I did the average length of stay with the orginal 6 admits and date ranges, it wouldn't be accurate because I would have to divide the number of admits by 6 rather than 3.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 18 Sep 2023 12:45:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-I-collapse-consecutive-dates/m-p/894775#M353456</guid>
      <dc:creator>amandav2107</dc:creator>
      <dc:date>2023-09-18T12:45:38Z</dc:date>
    </item>
    <item>
      <title>Re: How do I collapse consecutive dates?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-I-collapse-consecutive-dates/m-p/894776#M353457</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/31461"&gt;@mkeintz&lt;/a&gt;&amp;nbsp;Also, with the steps you provided, it did choose the right admit dates but the wrong lag_enddate.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 18 Sep 2023 12:47:57 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-I-collapse-consecutive-dates/m-p/894776#M353457</guid>
      <dc:creator>amandav2107</dc:creator>
      <dc:date>2023-09-18T12:47:57Z</dc:date>
    </item>
    <item>
      <title>Re: How do I collapse consecutive dates?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-I-collapse-consecutive-dates/m-p/894827#M353475</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/429577"&gt;@amandav2107&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;
&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/31461"&gt;@mkeintz&lt;/a&gt;&amp;nbsp;Also, with the steps you provided, it did choose the right admit dates but the wrong lag_enddate.&lt;/P&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;I'd say naming a variable &lt;EM&gt;&lt;STRONG&gt;lag_enddate&lt;/STRONG&gt;&lt;/EM&gt; implies looking back, which is actually the opposite of what I now see you want.&amp;nbsp; You want the &lt;EM&gt;&lt;STRONG&gt;last_enddate&lt;/STRONG&gt;&lt;/EM&gt;&amp;nbsp;(which I use in the code below) in a group of records, in which all the other data come from the first record of a sequence - i.e. you want to look forward.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The also means every obs in the dataset has to be read twice, because you have to look forward to get last_enddate.&amp;nbsp; Then in the second read, keep that last_enddate and output it with all the data from the first record.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;To know when to begin the re-reading, you have to know when you've reached the end of a sequence (i.e. when the next record is from a new client_id or has an admit date more than one day after the release date in hand.&amp;nbsp; That's what the merge statement below supports, in combination with the firstobs=2 dataset name parameter.&amp;nbsp; Note the merge statement does NOT have the usual accompanying BY statement.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data morethanone;
  input
  ID       admit :date9.	client_id	release :date9.	admitcount;
  format admit release date9. ;
datalines;
295815	13-Dec-22	4087673300	7-Jan-23	1
295936	7-Jan-23	4087673300	9-Jan-23	2
295950	9-Jan-23	4087673300	18-Jan-23	3
296219	21-Feb-23	4087673300	22-Feb-23	4
299130	26-Jun-23	4087673300	26-Jun-23	5
299132	26-Jun-23	4087673300	6-Jul-23	6
run;

data want (drop=i j nxt_:);
  do i=1 by 1 until (nxt_cid^=client_id or nxt_adm&amp;gt;release+1);
    merge morethanone 
          morethanone (firstobs=2 keep=client_id admit rename=(client_id=nxt_cid admit=nxt_adm));
    last_enddate=release;
  end;
  attrib last_enddate label='Final RELEASE date in this sequence' format=date9.;
  do j=1 to i;   /*Reread the sequence */
    set morethanone;
    if j=1 then output;
  end;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 18 Sep 2023 17:28:50 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-I-collapse-consecutive-dates/m-p/894827#M353475</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2023-09-18T17:28:50Z</dc:date>
    </item>
    <item>
      <title>Re: How do I collapse consecutive dates?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-I-collapse-consecutive-dates/m-p/894868#M353484</link>
      <description>&lt;P&gt;It is probably easier to think about this as a LOOK AHEAD problem instead of a LOOK BACK problem.&lt;/P&gt;
&lt;P&gt;So instead of the LAG of RELEASE you need to find the LEAD of ADMIT.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Here is one method using a second SET statement with dataset options to just pull in the next value of ADMIT and call it NEXT_ADMIT.&lt;/P&gt;
&lt;P&gt;Now you just need to RETAIN the new starting date to do the comlapsing.&lt;/P&gt;
&lt;P&gt;While we are at is let's make the minimum gap between release and the next admit that we want to collapse into a macro variable to make it easier.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;First let's convert your listing into actual data.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
  input ID $ admit :date. client_id :$10. release :date. admitcount;
  format admit release date9.;
cards;
295815 13-Dec-22 4087673300  7-Jan-23 1
295936  7-Jan-23 4087673300  9-Jan-23 2
295950  9-Jan-23 4087673300 18-Jan-23 3
296219 21-Feb-23 4087673300 22-Feb-23 4
299130 26-Jun-23 4087673300 26-Jun-23 5
299132 26-Jun-23 4087673300  6-Jul-23 6
;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Now we can process it by CLIENT_ID in the order of ADMIT.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%let gap=0;
data want;
  set have ;
  by client_id admit ;
  set have(firstobs=2 keep=admit rename=(admit=next_admit)) have(obs=1 drop=_all_);
  length start end n_admit days gap 8;
  retain start;
  if first.client_id then do;
    start=admit;
    n_admit=0;
  end;
  if last.client_id then next_admit = release + &amp;amp;gap +1;
  n_admit +1;
  gap =next_admit-release ;
  if gap &amp;gt; &amp;amp;gap then do;
    end = release;
    days = release - start +1;
    if last.client_id then gap=.;
    output;
    start=admit;
    n_admit=0;
  end; 
  format start end date9.;
  drop id admit release next_admit;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Result&lt;/P&gt;
&lt;PRE&gt;Obs    client_id     admitcount        start          end    n_admit    days    gap

 1     4087673300         3        13DEC2022    18JAN2023       3         37     34
 2     4087673300         4        09JAN2023    22FEB2023       1         45    124
 3     4087673300         6        21FEB2023    06JUL2023       2        136      .
&lt;/PRE&gt;</description>
      <pubDate>Mon, 18 Sep 2023 23:30:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-I-collapse-consecutive-dates/m-p/894868#M353484</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2023-09-18T23:30:18Z</dc:date>
    </item>
    <item>
      <title>Re: How do I collapse consecutive dates?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-I-collapse-consecutive-dates/m-p/894949#M353526</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/31461"&gt;@mkeintz&lt;/a&gt;&amp;nbsp;Okay, I've never used this logic before. That was really interesting to work through. What was your output? Because I ended up with one record with a&amp;nbsp;&lt;EM&gt;&lt;STRONG&gt;last_enddate&amp;nbsp;&lt;/STRONG&gt;&lt;/EM&gt;of 07JAN2023.&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;admit&lt;/TD&gt;&lt;TD&gt;client_id&lt;/TD&gt;&lt;TD&gt;release&lt;/TD&gt;&lt;TD&gt;admitcount&lt;/TD&gt;&lt;TD&gt;last_enddate&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;299132&lt;/TD&gt;&lt;TD&gt;26-Jun-23&lt;/TD&gt;&lt;TD&gt;4087673300&lt;/TD&gt;&lt;TD&gt;6-Jul-23&lt;/TD&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;07-Jan-23&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;That was this client's last admit and and last release date. I am missing two more&amp;nbsp;&lt;STRONG&gt;true&amp;nbsp;&lt;/STRONG&gt;admits.&lt;/P&gt;</description>
      <pubDate>Tue, 19 Sep 2023 18:01:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-I-collapse-consecutive-dates/m-p/894949#M353526</guid>
      <dc:creator>amandav2107</dc:creator>
      <dc:date>2023-09-19T18:01:32Z</dc:date>
    </item>
    <item>
      <title>Re: How do I collapse consecutive dates?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-I-collapse-consecutive-dates/m-p/894960#M353530</link>
      <description>&lt;P&gt;Hey&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/159"&gt;@Tom&lt;/a&gt;&amp;nbsp;! Interesting logic, however with the start and end dates are wrong. With the results you ended&amp;nbsp; up with, my days will be off. The program choose the right 1st &lt;EM&gt;&lt;STRONG&gt;start&lt;/STRONG&gt; &lt;/EM&gt;and 1st &lt;EM&gt;&lt;STRONG&gt;end&amp;nbsp;&lt;/STRONG&gt;&lt;/EM&gt;but should have been&amp;nbsp;&lt;EM&gt;&lt;STRONG&gt;n_admit&amp;nbsp;&lt;/STRONG&gt;&lt;/EM&gt;1. For the 2nd &lt;EM&gt;&lt;STRONG&gt;start&lt;/STRONG&gt;&lt;/EM&gt;/&lt;EM&gt;&lt;STRONG&gt;n_admit&lt;/STRONG&gt;&lt;/EM&gt; it chose the wrong end. It should have been&amp;nbsp;&lt;STRONG&gt;22FEB2023&lt;/STRONG&gt;. As for&amp;nbsp;&lt;EM&gt;&lt;STRONG&gt;n_admit&lt;/STRONG&gt;&lt;/EM&gt; 1,&amp;nbsp;the start should have been&amp;nbsp;&lt;STRONG&gt;26JUN2023&lt;/STRONG&gt; and the end should have been&amp;nbsp;&lt;STRONG&gt;06JUL2023&lt;/STRONG&gt;.&lt;/P&gt;&lt;P&gt;&lt;EM&gt;&lt;STRONG&gt;n_admit&amp;nbsp;&lt;/STRONG&gt;&lt;/EM&gt;2 and 1 overlap.&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="sas"&gt;Obs    client_id     admitcount        start          end    n_admit    days    gap

 1     4087673300         3        13DEC2022    18JAN2023       3         37     34
 2     4087673300         4        09JAN2023    22FEB2023       1         45    124
 3     4087673300         6        21FEB2023    06JUL2023       2        136      .&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Here are the dates I want to ultimately keep to do the count of days inbetween. With this result, I'd have an accurate count.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;First admit&lt;/STRONG&gt;: 13DEC2022 - 18JAN2023&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Second admit&lt;/STRONG&gt;: 21FEB2023 - 22FEB2023&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Third admit&lt;/STRONG&gt;: 26JUN2023 - 06JUL2023&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 19 Sep 2023 18:29:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-I-collapse-consecutive-dates/m-p/894960#M353530</guid>
      <dc:creator>amandav2107</dc:creator>
      <dc:date>2023-09-19T18:29:01Z</dc:date>
    </item>
    <item>
      <title>Re: How do I collapse consecutive dates?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-I-collapse-consecutive-dates/m-p/894963#M353533</link>
      <description>&lt;P&gt;Set the START to missing after detecting a gap.&lt;/P&gt;
&lt;P&gt;Test for missing(START) to set a new START.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
  input ID $ admit :date. client_id :$10. release :date. admitcount;
  format admit release date9.;
cards;
295815 13-Dec-22 4087673300  7-Jan-23 1
295936  7-Jan-23 4087673300  9-Jan-23 2
295950  9-Jan-23 4087673300 18-Jan-23 3
296219 21-Feb-23 4087673300 22-Feb-23 4
299130 26-Jun-23 4087673300 26-Jun-23 5
299132 26-Jun-23 4087673300  6-Jul-23 6
296219 21-Feb-23 999        22-Feb-23 1
299130 26-Jun-23 999        26-Jun-23 2
299132 26-Jun-23 999         6-Jul-23 3
;

%let gap=0;
data want;
  set have ;
  by client_id admit ;
* Add NEXT_ADMIT variable ;
  set have(firstobs=2 keep=admit rename=(admit=next_admit)) have(obs=1 drop=_all_);
  if last.client_id then next_admit = release + &amp;amp;gap +1;

  length start end n_admit days gap 8;
  start=coalesce(start,admit);
  n_admit +1;
  retain start;
  gap=next_admit-release ;
  if gap &amp;gt; &amp;amp;gap then do;
    end = release;
    days = release - start +1;
    if last.client_id then gap=.;
    output;
    start=.;
    n_admit=0;
  end; 
  format start end date9.;
  drop id admit release next_admit;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;PRE&gt;Obs    client_id     admitcount        start          end    n_admit    days    gap

 1     4087673300         3        13DEC2022    18JAN2023       3        37      34
 2     4087673300         4        21FEB2023    22FEB2023       1         2     124
 3     4087673300         6        26JUN2023    06JUL2023       2        11       .
 4     999                1        21FEB2023    22FEB2023       1         2     124
 5     999                3        26JUN2023    06JUL2023       2        11       .
&lt;/PRE&gt;</description>
      <pubDate>Tue, 19 Sep 2023 18:48:57 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-I-collapse-consecutive-dates/m-p/894963#M353533</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2023-09-19T18:48:57Z</dc:date>
    </item>
    <item>
      <title>Re: How do I collapse consecutive dates?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-I-collapse-consecutive-dates/m-p/894966#M353534</link>
      <description>&lt;P&gt;That worked really well! Thank you for that. Can I utilize this same program with a dataset that has more than one &lt;EM&gt;&lt;STRONG&gt;client_id&lt;/STRONG&gt;&lt;/EM&gt; (hundreds)?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Example below only has 3 cleints (but 2 more than the first example):&amp;nbsp;&lt;STRONG&gt;4087673300&lt;/STRONG&gt;,&amp;nbsp;&lt;STRONG&gt;5265189100&lt;/STRONG&gt;, &amp;amp;&amp;nbsp;&lt;STRONG&gt;8646854600&lt;/STRONG&gt;.&lt;/P&gt;&lt;LI-CODE lang="sas"&gt;data have;
  input ID $ admit :date. client_id :$10. release :date. admitcount;
  format admit release date9.;
cards;
295815 13-Dec-22 8646854600  7-Jan-23 1
295936  7-Jan-23 8646854600  9-Jan-23 2
295950  9-Jan-23 8646854600 18-Jan-23 3
296219 21-Feb-23 8646854600 22-Feb-23 4
299130 26-Jun-23 8646854600 26-Jun-23 5
299132 26-Jun-23 8646854600  6-Jul-23 6
295815 13-Dec-22 5265189100  7-Jan-23 1
295936  7-Jan-23 5265189100  9-Jan-23 2
295950  9-Jan-23 5265189100 18-Jan-23 3
296219 21-Feb-23 5265189100 22-Feb-23 4
299130 26-Jun-23 5265189100 26-Jun-23 5
299132 26-Jun-23 5265189100  6-Jul-23 6
295815 13-Dec-22 4087673300  7-Jan-23 1
295936  7-Jan-23 4087673300  9-Jan-23 2
295950  9-Jan-23 4087673300 18-Jan-23 3
296219 21-Feb-23 4087673300 22-Feb-23 4
299130 26-Jun-23 4087673300 26-Jun-23 5
299132 26-Jun-23 4087673300  6-Jul-23 6
;&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 19 Sep 2023 19:08:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-I-collapse-consecutive-dates/m-p/894966#M353534</guid>
      <dc:creator>amandav2107</dc:creator>
      <dc:date>2023-09-19T19:08:53Z</dc:date>
    </item>
    <item>
      <title>Re: How do I collapse consecutive dates?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-I-collapse-consecutive-dates/m-p/894967#M353535</link>
      <description>&lt;P&gt;Yes.&amp;nbsp; Just make sure it is sorted.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sort data=have;
  by client_id admit release;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Result&lt;/P&gt;
&lt;PRE&gt;Obs    client_id     admitcount        start          end    n_admit    days    gap

 1     4087673300         3        13DEC2022    18JAN2023       3        37      34
 2     4087673300         4        21FEB2023    22FEB2023       1         2     124
 3     4087673300         6        26JUN2023    06JUL2023       2        11       .
 4     5265189100         3        13DEC2022    18JAN2023       3        37      34
 5     5265189100         4        21FEB2023    22FEB2023       1         2     124
 6     5265189100         6        26JUN2023    06JUL2023       2        11       .
 7     8646854600         3        13DEC2022    18JAN2023       3        37      34
 8     8646854600         4        21FEB2023    22FEB2023       1         2     124
 9     8646854600         6        26JUN2023    06JUL2023       2        11       .
&lt;/PRE&gt;</description>
      <pubDate>Tue, 19 Sep 2023 19:28:02 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-I-collapse-consecutive-dates/m-p/894967#M353535</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2023-09-19T19:28:02Z</dc:date>
    </item>
    <item>
      <title>Re: How do I collapse consecutive dates?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-I-collapse-consecutive-dates/m-p/894968#M353536</link>
      <description>&lt;P&gt;Thank you, Tom! I really appreciate the help.&lt;/P&gt;</description>
      <pubDate>Tue, 19 Sep 2023 19:30:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-I-collapse-consecutive-dates/m-p/894968#M353536</guid>
      <dc:creator>amandav2107</dc:creator>
      <dc:date>2023-09-19T19:30:17Z</dc:date>
    </item>
  </channel>
</rss>

