<?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: PROC SQL: Multiple Varaibles with Dates in Two Columns - Max and Min without Break in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/PROC-SQL-Multiple-Varaibles-with-Dates-in-Two-Columns-Max-and/m-p/718492#M222372</link>
    <description>&lt;P&gt;SQL is not suited for this, the DATA step is much better at dealing with sequences:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input Member $ Start :mmddyy10. End :mmddyy10.;
format start end yymmdd10.;
datalines;
1 01/01/2015 03/12/2015
1 03/13/2015 07/02/2015
1 07/03/2015 10/01/2015
1 10/03/2015 10/31/2015
2 01/01/2015 04/01/2015
2 04/02/2015 05/01/2015
2 12/01/2015 12/31/2015
;

data want;
merge
  have
  have (
    firstobs=2
    keep=member start
    rename=(member=_member start=_start)
  )
;
retain fstart;
if member ne lag(member) then fstart = start;
if member ne _member or _start gt end + 1
then do;
  start = fstart;
  output;
  fstart = _start;
end;
drop fstart _:;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;I added an additional observation for member 1 to show how the code deals with a break in membership, and when a single observation constitutes one period.&lt;/P&gt;</description>
    <pubDate>Thu, 11 Feb 2021 07:22:52 GMT</pubDate>
    <dc:creator>Kurt_Bremser</dc:creator>
    <dc:date>2021-02-11T07:22:52Z</dc:date>
    <item>
      <title>PROC SQL: Multiple Varaibles with Dates in Two Columns - Max and Min without Break</title>
      <link>https://communities.sas.com/t5/SAS-Programming/PROC-SQL-Multiple-Varaibles-with-Dates-in-Two-Columns-Max-and/m-p/718385#M222329</link>
      <description>&lt;P&gt;First time poster - frequent lurker, many thanks to all who have answered questions in the past I was able to use and reference!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have variables with membership that has a Start &amp;amp; End Dates and looking to get the MIN and MAX without breaks&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Example:&lt;/P&gt;&lt;P&gt;Member&amp;nbsp; &amp;nbsp; Start&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; End&lt;/P&gt;&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;01/01/2015&amp;nbsp; &amp;nbsp; &amp;nbsp;03/12/2015&lt;/P&gt;&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;03/13/2015&amp;nbsp; &amp;nbsp; &amp;nbsp;07/02/2015&lt;/P&gt;&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;07/03/2015&amp;nbsp; &amp;nbsp; &amp;nbsp;10/01/2015&lt;/P&gt;&lt;P&gt;2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;01/01/2015&amp;nbsp; &amp;nbsp; &amp;nbsp; 04/01/2015&lt;/P&gt;&lt;P&gt;2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 04/02/2015&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;05/01/2015&lt;/P&gt;&lt;P&gt;2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 12/01/2015&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;12/31/2015&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I want the output to be below:&lt;/P&gt;&lt;P&gt;Member&amp;nbsp; &amp;nbsp;Start&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;End&lt;/P&gt;&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 01/01/2015&amp;nbsp; &amp;nbsp; &amp;nbsp;10/01/2015&lt;/P&gt;&lt;P&gt;2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 01/01/2015&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;05/01/2015&lt;/P&gt;&lt;P&gt;2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 12/01/2015&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;12/31/2015&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Any help is greatly appreciated!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 10 Feb 2021 20:28:31 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/PROC-SQL-Multiple-Varaibles-with-Dates-in-Two-Columns-Max-and/m-p/718385#M222329</guid>
      <dc:creator>TheMajewski</dc:creator>
      <dc:date>2021-02-10T20:28:31Z</dc:date>
    </item>
    <item>
      <title>Re: PROC SQL: Multiple Varaibles with Dates in Two Columns - Max and Min without Break</title>
      <link>https://communities.sas.com/t5/SAS-Programming/PROC-SQL-Multiple-Varaibles-with-Dates-in-Two-Columns-Max-and/m-p/718460#M222360</link>
      <description>&lt;P&gt;Hi, does the below help?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
	infile datalines;
	input member $ start:mmddyy10. end:mmddyy10.;
	format start end mmddyy10.;
	datalines;
1 01/01/2015 03/12/2015
1 03/13/2015 07/02/2015
1 07/03/2015 10/01/2015
2 01/01/2015 04/01/2015
2 04/02/2015 05/01/2015
2 12/01/2015 12/31/2015
;
run;

proc means data=have nway noprint;
	class member;
	var start end;
	output out=want (drop=_freq_ _type_ end_min start_max rename=(start_min = start end_max=end))  min= max= /autoname;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 11 Feb 2021 03:14:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/PROC-SQL-Multiple-Varaibles-with-Dates-in-Two-Columns-Max-and/m-p/718460#M222360</guid>
      <dc:creator>qoit</dc:creator>
      <dc:date>2021-02-11T03:14:11Z</dc:date>
    </item>
    <item>
      <title>Re: PROC SQL: Multiple Varaibles with Dates in Two Columns - Max and Min without Break</title>
      <link>https://communities.sas.com/t5/SAS-Programming/PROC-SQL-Multiple-Varaibles-with-Dates-in-Two-Columns-Max-and/m-p/718492#M222372</link>
      <description>&lt;P&gt;SQL is not suited for this, the DATA step is much better at dealing with sequences:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input Member $ Start :mmddyy10. End :mmddyy10.;
format start end yymmdd10.;
datalines;
1 01/01/2015 03/12/2015
1 03/13/2015 07/02/2015
1 07/03/2015 10/01/2015
1 10/03/2015 10/31/2015
2 01/01/2015 04/01/2015
2 04/02/2015 05/01/2015
2 12/01/2015 12/31/2015
;

data want;
merge
  have
  have (
    firstobs=2
    keep=member start
    rename=(member=_member start=_start)
  )
;
retain fstart;
if member ne lag(member) then fstart = start;
if member ne _member or _start gt end + 1
then do;
  start = fstart;
  output;
  fstart = _start;
end;
drop fstart _:;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;I added an additional observation for member 1 to show how the code deals with a break in membership, and when a single observation constitutes one period.&lt;/P&gt;</description>
      <pubDate>Thu, 11 Feb 2021 07:22:52 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/PROC-SQL-Multiple-Varaibles-with-Dates-in-Two-Columns-Max-and/m-p/718492#M222372</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2021-02-11T07:22:52Z</dc:date>
    </item>
    <item>
      <title>Re: PROC SQL: Multiple Varaibles with Dates in Two Columns - Max and Min without Break</title>
      <link>https://communities.sas.com/t5/SAS-Programming/PROC-SQL-Multiple-Varaibles-with-Dates-in-Two-Columns-Max-and/m-p/718623#M222417</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input Member $ Start :mmddyy10. End :mmddyy10.;
format start end yymmdd10.;
datalines;
1               01/01/2015     03/12/2015
1               03/13/2015     07/02/2015
1               07/03/2015     10/01/2015
2               01/01/2015      04/01/2015
2              04/02/2015       05/01/2015
2              12/01/2015       12/31/2015
;
data temp;
 set have;
 do date=start to end;
  output;
 end;
 keep member date;
run;
proc sort data=temp nodupkey;
by member date;
run;
data temp;
 set temp;
 by member;
 if first.member or dif(date) ne 1 then group+1;
run;
proc sql;
create table want as
select member,group,min(date) as start format=mmddyy10.,max(date) as end format=mmddyy10.
 from temp
  group by member,group;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 11 Feb 2021 15:05:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/PROC-SQL-Multiple-Varaibles-with-Dates-in-Two-Columns-Max-and/m-p/718623#M222417</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2021-02-11T15:05:21Z</dc:date>
    </item>
    <item>
      <title>Re: PROC SQL: Multiple Varaibles with Dates in Two Columns - Max and Min without Break</title>
      <link>https://communities.sas.com/t5/SAS-Programming/PROC-SQL-Multiple-Varaibles-with-Dates-in-Two-Columns-Max-and/m-p/718812#M222494</link>
      <description>&lt;P&gt;Another way:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data HAVE;
input MEMBER $  START :mmddyy10. END :mmddyy10.;
format START END yymmdd10.;
datalines;
1 01/01/2014 03/12/2014
1 01/01/2015 03/12/2015
1 03/13/2015 07/02/2015
1 07/03/2015 10/01/2015
1 10/03/2015 10/31/2015
2 01/01/2015 04/01/2015
2 04/02/2015 05/01/2015
2 12/01/2015 12/31/2015
;
data WANT;
  set HAVE;
  by MEMBER;
  _END=lag(END);                            
  if first.MEMBER then _START=START ;  
  else if START-_END ne 1 then do;    
    S=_START; E=_END; output;                           
    _START=START;
  end;
  if last.MEMBER then do;       
    S=_START; E=END; output;                           
  end; 
  retain _START;
  keep S E MEMBER;
  format S E date9. ;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;DIV class="branch"&gt;&lt;BR /&gt;
&lt;DIV&gt;
&lt;DIV align="left"&gt;
&lt;TABLE class="table" summary="Procedure Print: Data Set WORK.WANT" frame="box" rules="all" cellspacing="0" cellpadding="5"&gt;&lt;COLGROUP&gt; &lt;COL /&gt; &lt;COL /&gt; &lt;COL /&gt;&lt;/COLGROUP&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH class="l header" scope="col"&gt;MEMBER&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;&amp;nbsp; S&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;&amp;nbsp; E&lt;/TH&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;1&lt;/TD&gt;
&lt;TD class="r data"&gt;01JAN2014&lt;/TD&gt;
&lt;TD class="r data"&gt;12MAR2014&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;1&lt;/TD&gt;
&lt;TD class="r data"&gt;01JAN2015&lt;/TD&gt;
&lt;TD class="r data"&gt;01OCT2015&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;1&lt;/TD&gt;
&lt;TD class="r data"&gt;03OCT2015&lt;/TD&gt;
&lt;TD class="r data"&gt;31OCT2015&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;2&lt;/TD&gt;
&lt;TD class="r data"&gt;01JAN2015&lt;/TD&gt;
&lt;TD class="r data"&gt;01MAY2015&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="l data"&gt;2&lt;/TD&gt;
&lt;TD class="r data"&gt;01DEC2015&lt;/TD&gt;
&lt;TD class="r data"&gt;31DEC2015&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 12 Feb 2021 04:28:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/PROC-SQL-Multiple-Varaibles-with-Dates-in-Two-Columns-Max-and/m-p/718812#M222494</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2021-02-12T04:28:34Z</dc:date>
    </item>
  </channel>
</rss>

