<?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 to summarize dataset by Min.and Max date value by Group in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/How-to-summarize-dataset-by-Min-and-Max-date-value-by-Group/m-p/415813#M280160</link>
    <description>&lt;P&gt;If you create a flag to indicate where the breaks in time occur in your data set, then PROC SUMMARY will do the rest.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Something like (untested code)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;data want;
    set have;
    by id status;
    prev_enddt=lag(enddt);
    if first.status or prev_enddt^=(startdt-1) then flag+1;
run;

proc summary data = want nway;
    class id status flag;
    var startdt enddt;
    output out=want2 min(startdt)=min_startdt max(enddt)=max_enddt;
run;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Thu, 23 Nov 2017 14:40:47 GMT</pubDate>
    <dc:creator>PaigeMiller</dc:creator>
    <dc:date>2017-11-23T14:40:47Z</dc:date>
    <item>
      <title>How to summarize dataset by Min.and Max date value by Group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-summarize-dataset-by-Min-and-Max-date-value-by-Group/m-p/415711#M280157</link>
      <description>&lt;P&gt;&lt;SPAN style="font-size: 10.5pt; font-family: 'Helvetica',sans-serif; color: #333333;"&gt;Hi, I want to track changes of a person's status and&amp;nbsp;find their minimum&amp;nbsp;start and maximum end dates for each change. The raw datatable below is a sample where you can see for person A the minimum start&amp;nbsp;and maximum end date for their Main status are&amp;nbsp;01Jan15 to&amp;nbsp;01Feb16. So for Row 1 and 2 there's no change in status and since EndDt for row 1 is 06July15 and StartDt for row 2 is 07July15 there's no break in the period, and the two rows should be aggregated into one row start on 01Jan15 and end on 01Feb16.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10.5pt; font-family: 'Helvetica',sans-serif; color: #333333;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10.5pt; font-family: 'Helvetica',sans-serif; color: #333333;"&gt;The 3rd row should be kept because there's a break in the period even though status stays in Main, StartDt is 01Oct16 and EndDt is 31Dec16.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10.5pt; font-family: 'Helvetica',sans-serif; color: #333333;"&gt;The 4th and 5th row should be aggregated into one row that reads status in Co and StartDt is 01Jan17 and EndDt is 01Sep17.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10.5pt; font-family: 'Helvetica',sans-serif; color: #333333;"&gt;The 6th row should be kept unchanged start from 30Oct17 to 05Nov17.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10.5pt; font-family: 'Helvetica',sans-serif; color: #333333;"&gt;The desired reduced datatable is copied&amp;nbsp;below the raw datatable&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10.5pt; font-family: 'Helvetica',sans-serif; color: #333333;"&gt;Raw datatable&lt;/SPAN&gt;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Row&lt;/TD&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;Status&lt;/TD&gt;&lt;TD&gt;StartDt&lt;/TD&gt;&lt;TD&gt;EndDt&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;Main&lt;/TD&gt;&lt;TD&gt;01-Jan-15&lt;/TD&gt;&lt;TD&gt;06-Jul-15&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;Main&lt;/TD&gt;&lt;TD&gt;07-Jul-15&lt;/TD&gt;&lt;TD&gt;01-Feb-16&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;Main&lt;/TD&gt;&lt;TD&gt;01-Oct-16&lt;/TD&gt;&lt;TD&gt;31-Dec-16&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;Co&lt;/TD&gt;&lt;TD&gt;01-Jan-17&lt;/TD&gt;&lt;TD&gt;07-Jul-17&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;Co&lt;/TD&gt;&lt;TD&gt;08-Jul-17&lt;/TD&gt;&lt;TD&gt;01-Sep-17&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;Co&lt;/TD&gt;&lt;TD&gt;30-Oct-17&lt;/TD&gt;&lt;TD&gt;05-Nov-17&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;Desired reduced datatable&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;Status&lt;/TD&gt;&lt;TD&gt;MinStartDt&lt;/TD&gt;&lt;TD&gt;MaxEndDt&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;Main&lt;/TD&gt;&lt;TD&gt;01-Jan-15&lt;/TD&gt;&lt;TD&gt;01-Feb-16&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;Main&lt;/TD&gt;&lt;TD&gt;01-Oct-16&lt;/TD&gt;&lt;TD&gt;31-Dec-16&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;Co&lt;/TD&gt;&lt;TD&gt;01-Jan-17&lt;/TD&gt;&lt;TD&gt;01-Sep-17&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;Co&lt;/TD&gt;&lt;TD&gt;30-Oct-17&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;05-Nov-17&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;This problem has been bugging me for days, I appreciate any suggestions I could get. Also I am new to this, so could you please give more details in your answers?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10.5pt; font-family: 'Helvetica',sans-serif; color: #333333;"&gt;Many Thanks!&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-size: 10.5pt; font-family: 'Helvetica',sans-serif; color: #333333;"&gt;Michelle&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 22 Nov 2017 23:01:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-summarize-dataset-by-Min-and-Max-date-value-by-Group/m-p/415711#M280157</guid>
      <dc:creator>topryde</dc:creator>
      <dc:date>2017-11-22T23:01:22Z</dc:date>
    </item>
    <item>
      <title>Re: How to summarize dataset by Min.and Max date value by Group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-summarize-dataset-by-Min-and-Max-date-value-by-Group/m-p/415729#M280158</link>
      <description>&lt;P&gt;1) sort dataset&amp;nbsp;&lt;STRONG&gt;by is status startDT&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;2) use&amp;nbsp;&lt;STRONG&gt;retain&lt;/STRONG&gt; and&amp;nbsp;&lt;STRONG&gt;lag&lt;/STRONG&gt; function to save previous obs values of startDT endDT.&lt;/P&gt;
&lt;P&gt;3)&amp;nbsp;on&lt;STRONG&gt; first.status&amp;nbsp;&lt;/STRONG&gt;keep the retained startDT value into a &lt;U&gt;new variable&lt;/U&gt;.&lt;/P&gt;
&lt;P&gt;4) on&amp;nbsp;&lt;STRONG&gt;last.status&lt;/STRONG&gt; override the current startDT value with the &lt;U&gt;new&lt;/U&gt; retained startDT and do&amp;nbsp;&lt;STRONG&gt;output&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; else (any obs neither first nor last) - check is startDT &amp;gt; retained endDT +1.&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if positive do:&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -&amp;nbsp;&amp;nbsp;&lt;STRONG&gt;output&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; - override retained startDT with the current startDT.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;cretae your code and come back if you have any issue.&lt;/P&gt;</description>
      <pubDate>Thu, 23 Nov 2017 03:08:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-summarize-dataset-by-Min-and-Max-date-value-by-Group/m-p/415729#M280158</guid>
      <dc:creator>Shmuel</dc:creator>
      <dc:date>2017-11-23T03:08:15Z</dc:date>
    </item>
    <item>
      <title>Re: How to summarize dataset by Min.and Max date value by Group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-summarize-dataset-by-Min-and-Max-date-value-by-Group/m-p/415811#M280159</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile cards expandtabs truncover;
input Row	ID $	Status $	StartDt : date9.	EndDt : date9.;
format StartDt EndDt date9.;
cards;
1	A	Main	01-Jan-15	06-Jul-15
2	A	Main	07-Jul-15	01-Feb-16
3	A	Main	01-Oct-16	31-Dec-16
4	A	Co	01-Jan-17	07-Jul-17
5	A	Co	08-Jul-17	01-Sep-17
6	A	Co	30-Oct-17	05-Nov-17
;
run;
data temp;
 set have;
 by id status notsorted;
 if first.status or startdt-lag(enddt) ne 1 then group+1;
run;
data want;
 set temp;
 by group;
 retain start .;
 if first.group then start=startdt;
 if last.group;
 format start date9.;
 drop row startdt;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 23 Nov 2017 12:28:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-summarize-dataset-by-Min-and-Max-date-value-by-Group/m-p/415811#M280159</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2017-11-23T12:28:14Z</dc:date>
    </item>
    <item>
      <title>Re: How to summarize dataset by Min.and Max date value by Group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-summarize-dataset-by-Min-and-Max-date-value-by-Group/m-p/415813#M280160</link>
      <description>&lt;P&gt;If you create a flag to indicate where the breaks in time occur in your data set, then PROC SUMMARY will do the rest.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Something like (untested code)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;data want;
    set have;
    by id status;
    prev_enddt=lag(enddt);
    if first.status or prev_enddt^=(startdt-1) then flag+1;
run;

proc summary data = want nway;
    class id status flag;
    var startdt enddt;
    output out=want2 min(startdt)=min_startdt max(enddt)=max_enddt;
run;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 23 Nov 2017 14:40:47 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-summarize-dataset-by-Min-and-Max-date-value-by-Group/m-p/415813#M280160</guid>
      <dc:creator>PaigeMiller</dc:creator>
      <dc:date>2017-11-23T14:40:47Z</dc:date>
    </item>
    <item>
      <title>Re: How to summarize dataset by Min.and Max date value by Group</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-summarize-dataset-by-Min-and-Max-date-value-by-Group/m-p/417531#M280162</link>
      <description>I understand this now. Thankyou!</description>
      <pubDate>Thu, 30 Nov 2017 19:42:51 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-summarize-dataset-by-Min-and-Max-date-value-by-Group/m-p/417531#M280162</guid>
      <dc:creator>topryde</dc:creator>
      <dc:date>2017-11-30T19:42:51Z</dc:date>
    </item>
  </channel>
</rss>

