<?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: Comparing date within rows in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Comparing-date-within-rows/m-p/960230#M374530</link>
    <description>&lt;P&gt;The data step creating have has errors: unclosed quotes and a run in the middle of the step. The format statement is missing, too.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Saving the first values of &lt;FONT face="courier new,courier"&gt;police_effective_date&lt;/FONT&gt; and &lt;FONT face="courier new,courier"&gt;police_end_date&lt;/FONT&gt; in retained variables and using them to set flag when the data step reached to last obs for &lt;FONT face="courier new,courier"&gt;police&lt;/FONT&gt; seem to create what you want:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
    set have;
    by police;

    length 
        flag $ 10 
        first_eff_date first_end_date 8
    ;
    retain first_:;

    if first.police then do;
        first_eff_date = police_effective_date;
        first_end_date = police_end_date;
    end;

    if last.police then do;
        if police_end_date &amp;gt; first_end_date then do;
            if police_effective_date = first_eff_date then flag = "EXTENDED";
            if police_effective_date &amp;gt; first_eff_date then flag = "SHIFTED";
        end;
    end;

    drop first_:;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Assuming the data is sorted by &lt;FONT face="courier new,courier"&gt;police&lt;/FONT&gt; and &lt;FONT face="courier new,courier"&gt;end&lt;/FONT&gt;.&lt;/P&gt;</description>
    <pubDate>Wed, 26 Feb 2025 12:00:23 GMT</pubDate>
    <dc:creator>andreas_lds</dc:creator>
    <dc:date>2025-02-26T12:00:23Z</dc:date>
    <item>
      <title>Comparing date within rows</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Comparing-date-within-rows/m-p/960227#M374528</link>
      <description>&lt;P&gt;Comparing date within rows&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I wish to check and compare dates within rows for a group of data. Also, it is possible to only have 1 row of record for 1 group.&lt;/P&gt;&lt;P&gt;data have;&lt;/P&gt;&lt;P&gt;POLICE='POL1';&lt;/P&gt;&lt;P&gt;END=0;&lt;/P&gt;&lt;P&gt;POLICE_EFFECTIVE_DATE='01Jan2024'd;&lt;/P&gt;&lt;P&gt;POLICE_END_DATE='31Dec2024'd;&lt;/P&gt;&lt;P&gt;output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;POLICE='POL1';&lt;/P&gt;&lt;P&gt;END=1;&lt;/P&gt;&lt;P&gt;POLICE_EFFECTIVE_DATE='01Jan2024'd;&lt;/P&gt;&lt;P&gt;POLICE_END_DATE='31Dec2024'd;&lt;/P&gt;&lt;P&gt;output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;POLICE='POL1';&lt;/P&gt;&lt;P&gt;END=2;&lt;/P&gt;&lt;P&gt;POLICE_EFFECTIVE_DATE='01Jan2024'd;&lt;/P&gt;&lt;P&gt;POLICE_END_DATE='31Jan2025'd;&lt;/P&gt;&lt;P&gt;output;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;POLICE='POL2';&lt;/P&gt;&lt;P&gt;END=0;&lt;/P&gt;&lt;P&gt;POLICE_EFFECTIVE_DATE='01Jan2024'd;&lt;/P&gt;&lt;P&gt;POLICE_END_DATE='31Dec2024'd;&lt;/P&gt;&lt;P&gt;output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;POLICE='POL3;&lt;/P&gt;&lt;P&gt;END=0;&lt;/P&gt;&lt;P&gt;POLICE_EFFECTIVE_DATE='01Jan2024'd;&lt;/P&gt;&lt;P&gt;POLICE_END_DATE='31Dec2024'd;&lt;/P&gt;&lt;P&gt;output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;POLICE='POL3;&lt;/P&gt;&lt;P&gt;END=1;&lt;/P&gt;&lt;P&gt;POLICE_EFFECTIVE_DATE='01Jan2024'd;&lt;/P&gt;&lt;P&gt;POLICE_END_DATE='31Dec2024'd;&lt;/P&gt;&lt;P&gt;output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;POLICE='POL3;&lt;/P&gt;&lt;P&gt;END=2;&lt;/P&gt;&lt;P&gt;POLICE_EFFECTIVE_DATE='01Feb2024'd;&lt;/P&gt;&lt;P&gt;POLICE_END_DATE='31Dec2025'd;&lt;/P&gt;&lt;P&gt;output;&lt;/P&gt;&lt;P&gt;It will look like this:&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;POLICE&lt;/TD&gt;&lt;TD&gt;END&lt;/TD&gt;&lt;TD&gt;POLICE_EFFECTIVE_DATE&lt;/TD&gt;&lt;TD&gt;POLICE_END_DATE&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;POL1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1/1/2024&lt;/TD&gt;&lt;TD&gt;31/12/2024&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;POL1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1/1/2024&lt;/TD&gt;&lt;TD&gt;31/12/2024&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;POL1&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1/1/2024&lt;/TD&gt;&lt;TD&gt;31/1/2025&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;POL2&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1/1/2024&lt;/TD&gt;&lt;TD&gt;31/12/2024&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;POL3&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1/1/2024&lt;/TD&gt;&lt;TD&gt;31/12/2024&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;POL3&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1/1/2024&lt;/TD&gt;&lt;TD&gt;31/12/2024&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;POL3&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1/2/2024&lt;/TD&gt;&lt;TD&gt;31/1/2025&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;What i want to achieve is this:&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;POLICE&lt;/TD&gt;&lt;TD&gt;END&lt;/TD&gt;&lt;TD&gt;POLICE_EFFECTIVE_DATE&lt;/TD&gt;&lt;TD&gt;POLICE_END_DATE&lt;/TD&gt;&lt;TD&gt;FLAG&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;POL1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1/1/2024&lt;/TD&gt;&lt;TD&gt;31/12/2024&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;POL1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1/1/2024&lt;/TD&gt;&lt;TD&gt;31/12/2024&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;POL1&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1/1/2024&lt;/TD&gt;&lt;TD&gt;31/1/2025&lt;/TD&gt;&lt;TD&gt;EXTENDED&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;POL2&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1/1/2024&lt;/TD&gt;&lt;TD&gt;31/12/2024&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;POL3&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1/1/2024&lt;/TD&gt;&lt;TD&gt;31/12/2024&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;POL3&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1/1/2024&lt;/TD&gt;&lt;TD&gt;31/12/2024&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;POL3&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1/2/2024&lt;/TD&gt;&lt;TD&gt;31/1/2025&lt;/TD&gt;&lt;TD&gt;SHIFTED&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;BR /&gt;&lt;BR /&gt;From what i can tell, ""FLAG" can be defined by looking at the last.END&amp;nbsp;POLICE_EFFECTIVE_DATE and&amp;nbsp;POLICE_END_DATE.&lt;/P&gt;&lt;P&gt;If last.END&amp;nbsp;POLICE_EFFECTIVE_DATE is the same as first.POLICE_EFFECTIVE_DATE&amp;nbsp;&amp;nbsp;&lt;BR /&gt;BUT&lt;BR /&gt;last.POLICE_END_DATE is greater than first.POLICE_END_DATE then last.flag = 'EXTENDED'.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;If last.END&amp;nbsp;POLICE_EFFECTIVE_DATE is greater than first.POLICE_EFFECTIVE_DATE&amp;nbsp;&amp;nbsp;&lt;BR /&gt;AND&lt;BR /&gt;last.POLICE_END_DATE is greater than first.POLICE_END_DATE then last.flag = 'SHIFTED'.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;i can think of first sorting the dataset by POLICE and END.&amp;nbsp;&lt;BR /&gt;Then, without a complex loop, is there a way for me to compare the date based on POLICE and END and check if it is EXTENDED OR SHIFTED&amp;nbsp; or not.&lt;/P&gt;</description>
      <pubDate>Wed, 26 Feb 2025 11:16:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Comparing-date-within-rows/m-p/960227#M374528</guid>
      <dc:creator>StickyRoll</dc:creator>
      <dc:date>2025-02-26T11:16:35Z</dc:date>
    </item>
    <item>
      <title>Re: Comparing date within rows</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Comparing-date-within-rows/m-p/960228#M374529</link>
      <description>&lt;P&gt;From what I understand your pseudo code was already very close to actual SAS syntax. You just need to retain the values of the first row per group so you can compare it when you've reached the last row of the group.&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
    input POLICE $ END POLICE_EFFECTIVE_DATE :date9. POLICE_END_DATE :date9.;
    format POLICE_EFFECTIVE_DATE POLICE_END_DATE date9.;
datalines;
POL1 0 01JAN2024 31DEC2024
POL1 1 01JAN2024 31DEC2024
POL1 2 01JAN2024 31JAN2025
POL2 0 01JAN2024 31DEC2024
POL3 0 01JAN2024 31DEC2024
POL3 1 01JAN2024 31DEC2024
POL3 2 01FEB2024 31DEC2025
;
run;

/* proc sort data=have; */
/*   by POLICE POLICE_EFFECTIVE_DATE POLICE_END_DATE; */
/* run; */

data want(drop=first_:);
  set have;
  by POLICE POLICE_EFFECTIVE_DATE POLICE_END_DATE;
  retain first_POLICE_EFFECTIVE_DATE first_POLICE_END_DATE;
  length type $8;
  if first.POLICE then
    do;
      first_POLICE_EFFECTIVE_DATE =POLICE_EFFECTIVE_DATE;
      first_POLICE_END_DATE       =POLICE_END_DATE;
    end;
  if last.POLICE then
    do;
      if POLICE_EFFECTIVE_DATE = first_POLICE_EFFECTIVE_DATE
         and 
         POLICE_END_DATE &amp;gt; first_POLICE_END_DATE
         then type='EXTENDED';
      else
      If POLICE_EFFECTIVE_DATE &amp;gt; first_POLICE_EFFECTIVE_DATE  
         and
         POLICE_END_DATE &amp;gt; first_POLICE_END_DATE 
         then type = 'SHIFTED';   
    end;
run;

proc print data=want;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Patrick_0-1740571223906.png" style="width: 400px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/104947i3F122DD09156702F/image-size/medium?v=v2&amp;amp;px=400" role="button" title="Patrick_0-1740571223906.png" alt="Patrick_0-1740571223906.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 26 Feb 2025 12:00:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Comparing-date-within-rows/m-p/960228#M374529</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2025-02-26T12:00:35Z</dc:date>
    </item>
    <item>
      <title>Re: Comparing date within rows</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Comparing-date-within-rows/m-p/960230#M374530</link>
      <description>&lt;P&gt;The data step creating have has errors: unclosed quotes and a run in the middle of the step. The format statement is missing, too.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Saving the first values of &lt;FONT face="courier new,courier"&gt;police_effective_date&lt;/FONT&gt; and &lt;FONT face="courier new,courier"&gt;police_end_date&lt;/FONT&gt; in retained variables and using them to set flag when the data step reached to last obs for &lt;FONT face="courier new,courier"&gt;police&lt;/FONT&gt; seem to create what you want:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
    set have;
    by police;

    length 
        flag $ 10 
        first_eff_date first_end_date 8
    ;
    retain first_:;

    if first.police then do;
        first_eff_date = police_effective_date;
        first_end_date = police_end_date;
    end;

    if last.police then do;
        if police_end_date &amp;gt; first_end_date then do;
            if police_effective_date = first_eff_date then flag = "EXTENDED";
            if police_effective_date &amp;gt; first_eff_date then flag = "SHIFTED";
        end;
    end;

    drop first_:;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Assuming the data is sorted by &lt;FONT face="courier new,courier"&gt;police&lt;/FONT&gt; and &lt;FONT face="courier new,courier"&gt;end&lt;/FONT&gt;.&lt;/P&gt;</description>
      <pubDate>Wed, 26 Feb 2025 12:00:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Comparing-date-within-rows/m-p/960230#M374530</guid>
      <dc:creator>andreas_lds</dc:creator>
      <dc:date>2025-02-26T12:00:23Z</dc:date>
    </item>
  </channel>
</rss>

