<?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 Trying to condense date timeframes in a flatfile in SAS Data Management</title>
    <link>https://communities.sas.com/t5/SAS-Data-Management/Trying-to-condense-date-timeframes-in-a-flatfile/m-p/403413#M12252</link>
    <description>&lt;P&gt;I currently have a set of 16 start dates and 16 end dates, per observation. For the sake of this example let's pretend that it is 3 repeating variables, a start time when a pay period began and an end time, when a pay period ended:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;start_1 end_1 start_2 end_2 start_3 end_3&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;What I am interested in doing is collapsing end dates and the subsequent start date when they are less than 30 days apart:&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;start_1:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;Jan 1&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;end_1:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;Jan 15&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;start_2:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;Jan 31&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;end_2:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;Feb 16&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;start_3:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;May 1&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;end_3:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;May 12&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This would become:&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;new_start_1:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;Jan 1&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;new_end_1:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;Feb 16&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;new_start_2:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;May 1&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;new_end_2:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;May 12&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;But, simultaneously, there could be another observation that looks like this, where all of the distances are &amp;gt; or equal to 30:&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;start_1:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;Jan 1&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;end_1:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;Jan 15&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;start_2:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;Feb&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;31&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;end_2:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;Mar&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;16&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;start_3:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;May 1&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;end_3:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;May 12&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This would essentially stay the same, but to maintain uniformity would need to be transferred to the new variable set:&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;new_start_1:&amp;nbsp;&lt;/STRONG&gt;&lt;SPAN&gt;Jan 1&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt; &lt;STRONG&gt;new_end_1&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;STRONG&gt;:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;Jan 15&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt; &lt;STRONG&gt;new_start_2&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;STRONG&gt;:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;Feb&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;31&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt; &lt;STRONG&gt;new_end_2&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;STRONG&gt;:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;Mar&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;16&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;STRONG&gt;new_start_3&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;STRONG&gt;:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;May 1&lt;/SPAN&gt;&lt;SPAN&gt; 3&amp;nbsp;&lt;STRONG&gt;new_end_3&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;STRONG&gt;:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;May 12&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Some additional points:&lt;/P&gt;&lt;P&gt;- This data was a created flatfile, so the 16th set of start and end variables is for the person that had the most pay periods. Some individuals have only start_1 and end_1 filled and the remaining are missing.&lt;/P&gt;&lt;P&gt;- All of these dates ascend chronologically.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;What do you recommend as my most efficient way to do this?&lt;/P&gt;</description>
    <pubDate>Thu, 12 Oct 2017 01:44:30 GMT</pubDate>
    <dc:creator>djohn051</dc:creator>
    <dc:date>2017-10-12T01:44:30Z</dc:date>
    <item>
      <title>Trying to condense date timeframes in a flatfile</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/Trying-to-condense-date-timeframes-in-a-flatfile/m-p/403413#M12252</link>
      <description>&lt;P&gt;I currently have a set of 16 start dates and 16 end dates, per observation. For the sake of this example let's pretend that it is 3 repeating variables, a start time when a pay period began and an end time, when a pay period ended:&lt;/P&gt;&lt;UL&gt;&lt;LI&gt;start_1 end_1 start_2 end_2 start_3 end_3&lt;/LI&gt;&lt;/UL&gt;&lt;P&gt;What I am interested in doing is collapsing end dates and the subsequent start date when they are less than 30 days apart:&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;start_1:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;Jan 1&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;end_1:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;Jan 15&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;start_2:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;Jan 31&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;end_2:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;Feb 16&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;start_3:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;May 1&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;end_3:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;May 12&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This would become:&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;new_start_1:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;Jan 1&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;new_end_1:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;Feb 16&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;new_start_2:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;May 1&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;new_end_2:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;May 12&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;But, simultaneously, there could be another observation that looks like this, where all of the distances are &amp;gt; or equal to 30:&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;start_1:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;Jan 1&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;end_1:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;Jan 15&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;start_2:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;Feb&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;31&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;end_2:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;Mar&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;16&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;start_3:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;May 1&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;STRONG&gt;end_3:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;May 12&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This would essentially stay the same, but to maintain uniformity would need to be transferred to the new variable set:&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;new_start_1:&amp;nbsp;&lt;/STRONG&gt;&lt;SPAN&gt;Jan 1&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt; &lt;STRONG&gt;new_end_1&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;STRONG&gt;:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;Jan 15&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt; &lt;STRONG&gt;new_start_2&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;STRONG&gt;:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;Feb&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;31&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt; &lt;STRONG&gt;new_end_2&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;STRONG&gt;:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;Mar&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;16&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;STRONG&gt;new_start_3&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;STRONG&gt;:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;May 1&lt;/SPAN&gt;&lt;SPAN&gt; 3&amp;nbsp;&lt;STRONG&gt;new_end_3&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;STRONG&gt;:&lt;/STRONG&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;May 12&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Some additional points:&lt;/P&gt;&lt;P&gt;- This data was a created flatfile, so the 16th set of start and end variables is for the person that had the most pay periods. Some individuals have only start_1 and end_1 filled and the remaining are missing.&lt;/P&gt;&lt;P&gt;- All of these dates ascend chronologically.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;What do you recommend as my most efficient way to do this?&lt;/P&gt;</description>
      <pubDate>Thu, 12 Oct 2017 01:44:30 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/Trying-to-condense-date-timeframes-in-a-flatfile/m-p/403413#M12252</guid>
      <dc:creator>djohn051</dc:creator>
      <dc:date>2017-10-12T01:44:30Z</dc:date>
    </item>
    <item>
      <title>Re: Trying to condense date timeframes in a flatfile</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/Trying-to-condense-date-timeframes-in-a-flatfile/m-p/403457#M12256</link>
      <description>&lt;P&gt;You should start by transposing into a long format, so you have individual records with only one start and end. Then it's only a sequential scan and using the lag() function to compare with the previous record. Keeping data in a long format removes all requirements for knowing the maximum number of periods, and it frees all the space used by missing values.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I even guess that your data was in a long format somewhere along the way.&lt;/P&gt;</description>
      <pubDate>Thu, 12 Oct 2017 06:41:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/Trying-to-condense-date-timeframes-in-a-flatfile/m-p/403457#M12256</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2017-10-12T06:41:24Z</dc:date>
    </item>
    <item>
      <title>Re: Trying to condense date timeframes in a flatfile</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/Trying-to-condense-date-timeframes-in-a-flatfile/m-p/403488#M12257</link>
      <description>That sounds much more feasible. Could you help me with writing the formula for that? Essentially my data would now be three columns: (id) (start) (end) - what I would want to do, within each id, is check if the (observation n+1 start date) - (end date) is &amp;lt;30 or GE 30.&lt;BR /&gt;&lt;BR /&gt;If it is GE 30 then (start date) (end date) line is kept and the process is rerun for (observation n+1 start date) by subtracting (observation n+2 start date) - (observation n+1 end date).&lt;BR /&gt;&lt;BR /&gt;If it is &amp;lt;30, then (observation start date) and (observation end date n+1) replaces (observation end date). Of course it would need to check each subsequent (start date n+#) - (end date) until it does find one GE 30 and then all data in between would be removed and, for example, your new line might be (observation start date) with the end date that came from (observation end date n+5).&lt;BR /&gt;&lt;BR /&gt;How would you do this with the lag function?&lt;BR /&gt;&lt;BR /&gt;Thank you!&lt;BR /&gt;</description>
      <pubDate>Thu, 12 Oct 2017 10:51:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/Trying-to-condense-date-timeframes-in-a-flatfile/m-p/403488#M12257</guid>
      <dc:creator>djohn051</dc:creator>
      <dc:date>2017-10-12T10:51:35Z</dc:date>
    </item>
    <item>
      <title>Re: Trying to condense date timeframes in a flatfile</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/Trying-to-condense-date-timeframes-in-a-flatfile/m-p/403496#M12258</link>
      <description>&lt;P&gt;This is the code that I would use:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
set have (rename=(start=_start end=_end)); /* rename start and end to get them out of the way */
by id;
retain start; /* keep new start variable across observations */
format start end date9.;
oldend = lag(_end); /* do this before everything else, so lag() is never called conditionally */
if first.id
then start = _start; /* initialize */
else do;
  if _start - oldend ge 30
  then do;
    end = oldend; /* take end from previous record */
    output;
    start = _start; /* initialize again */
  end;
end;
if last.id
then do; /* cleanup at end of id group */
  end = _end;
  output;
end;
drop _start _end oldend; /* get rid of old and intermediate variables */
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Edit: changed the comparison to ge instead of just &amp;gt; &lt;/P&gt;</description>
      <pubDate>Thu, 12 Oct 2017 11:31:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/Trying-to-condense-date-timeframes-in-a-flatfile/m-p/403496#M12258</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2017-10-12T11:31:21Z</dc:date>
    </item>
    <item>
      <title>Re: Trying to condense date timeframes in a flatfile</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/Trying-to-condense-date-timeframes-in-a-flatfile/m-p/403529#M12262</link>
      <description>Thank you very much. I will give this a try!&lt;BR /&gt;</description>
      <pubDate>Thu, 12 Oct 2017 12:59:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/Trying-to-condense-date-timeframes-in-a-flatfile/m-p/403529#M12262</guid>
      <dc:creator>djohn051</dc:creator>
      <dc:date>2017-10-12T12:59:35Z</dc:date>
    </item>
  </channel>
</rss>

