<?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: To flag a value according to date value in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/To-flag-a-value-according-to-date-value/m-p/541060#M149339</link>
    <description>&lt;P&gt;If performance is an issue, consider a double do loop:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
  input Id visits val date1: date9. date2 date9.;
  format date1 date2 date9.;
cards;
101 1 2.4 02jan2019 05jan2019
101 2 4 05jan2019 05jan2019
101 3 5 10jan2019 05jan2019
102 1 6 05jan2019 15jan2019
102 2 7 12jan2019 15jan2019
102 3 8 15jan2019 15jan2019
103 1 2.3 17jan2019 20jan2019
103 2 6 18jan2019 20jan2019
103 3 8 19jan2019 20jan2019
;
run;

data want;
do until (last.id);
  set have;
  by id;
  if date1 &amp;lt; date2
  then do;
    _date1 = date1;
    _date2 = date2;
  end;
end;
do until (last.id);
  set have;
  by id;
  if date1 = _date1 and date2 = _date2
  then flag = 'Y';
  else flag = ' ';
  output;
end;
drop _date1 _date2;
run;

proc print data=want noobs;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Result:&lt;/P&gt;
&lt;PRE&gt; Id    visits    val        date1        date2    flag

101       1      2.4    02JAN2019    05JAN2019     Y  
101       2      4.0    05JAN2019    05JAN2019        
101       3      5.0    10JAN2019    05JAN2019        
102       1      6.0    05JAN2019    15JAN2019        
102       2      7.0    12JAN2019    15JAN2019     Y  
102       3      8.0    15JAN2019    15JAN2019        
103       1      2.3    17JAN2019    20JAN2019        
103       2      6.0    18JAN2019    20JAN2019        
103       3      8.0    19JAN2019    20JAN2019     Y  
&lt;/PRE&gt;</description>
    <pubDate>Thu, 07 Mar 2019 12:36:59 GMT</pubDate>
    <dc:creator>Kurt_Bremser</dc:creator>
    <dc:date>2019-03-07T12:36:59Z</dc:date>
    <item>
      <title>To flag a value according to date value</title>
      <link>https://communities.sas.com/t5/SAS-Programming/To-flag-a-value-according-to-date-value/m-p/541030#M149323</link>
      <description>I have a dataset like this&lt;BR /&gt;Id visits val date1 date2&lt;BR /&gt;101 1 2.4 02jan2019 05jan2019&lt;BR /&gt;101 2 4 05jan2019 05jan2019&lt;BR /&gt;101 3 5 10jan2019 05jan2019&lt;BR /&gt;102 1 6 05jan2019 15jan2019&lt;BR /&gt;102 2 7 12jan2019 15jan2019&lt;BR /&gt;102 3 8 15jan2019 15jan2019&lt;BR /&gt;103 1 2.3 17 jan 2019 20jan2019&lt;BR /&gt;103 2 6 18jan2019 20jan2019&lt;BR /&gt;103 3 8 19jan2019 20jan2019&lt;BR /&gt;&lt;BR /&gt;I want to derive a flag variable , as per the conditions&lt;BR /&gt;The flag should be populated ONLY for last non missing 'val' variable for each subjects&lt;BR /&gt;Also date1 &amp;lt; date2 like&lt;BR /&gt;&lt;BR /&gt;Id visits val date1 date2 flag&lt;BR /&gt;101 1 2.4 02jan2019 05jan2019 Y&lt;BR /&gt;101 2 4 05jan2019 05jan2019&lt;BR /&gt;101 3 5 10jan2019 05jan2019&lt;BR /&gt;102 1 6 05jan2019 15jan2019&lt;BR /&gt;102 2 7 12jan2019 15jan2019 Y&lt;BR /&gt;102 3 8 15jan2019 15jan2019&lt;BR /&gt;103 1 2.3 17 jan 2019 20jan2019&lt;BR /&gt;103 2 6 18jan2019 20jan2019&lt;BR /&gt;103 3 8 19jan2019 20jan2019 Y&lt;BR /&gt;</description>
      <pubDate>Thu, 07 Mar 2019 10:02:31 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/To-flag-a-value-according-to-date-value/m-p/541030#M149323</guid>
      <dc:creator>AKHILA</dc:creator>
      <dc:date>2019-03-07T10:02:31Z</dc:date>
    </item>
    <item>
      <title>Re: To flag a value according to date value</title>
      <link>https://communities.sas.com/t5/SAS-Programming/To-flag-a-value-according-to-date-value/m-p/541033#M149326</link>
      <description>&lt;P&gt;Please post data in usable form: as data-step using datalines-statement.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;"The flag should be populated ONLY for last non missing 'val' variable for each subjects" -- how are "subjects" identified?&lt;/P&gt;</description>
      <pubDate>Thu, 07 Mar 2019 10:23:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/To-flag-a-value-according-to-date-value/m-p/541033#M149326</guid>
      <dc:creator>andreas_lds</dc:creator>
      <dc:date>2019-03-07T10:23:24Z</dc:date>
    </item>
    <item>
      <title>Re: To flag a value according to date value</title>
      <link>https://communities.sas.com/t5/SAS-Programming/To-flag-a-value-according-to-date-value/m-p/541035#M149328</link>
      <description>&lt;P&gt;As&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/15475"&gt;@andreas_lds&lt;/a&gt;&amp;nbsp; has said, post test data in a datastep using he code window - its the {i} above post area.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;At a guess I would say reverse sort the data, so the date is descending.&amp;nbsp; Then something like:&lt;/P&gt;
&lt;PRE&gt;data want;
  set have;
  retain flag;
  if first.id then flag="";
  if lag(id)=id and lag(flag) ne "Y" and date1 &amp;lt; date2 then flag="Y";
run;&lt;/PRE&gt;
&lt;P&gt;Then sort the data back again.&amp;nbsp; You could also do something in sql like:&lt;/P&gt;
&lt;PRE&gt;proc sql;
  create table want as 
  select a.*,
         b.flag
  from   have a
  left join (select *,"Y" as flag from have group by id having date1 &amp;lt;= date2) b
  on     a.id=b.id 
  and    a.date1=b.date1;
quit;&lt;/PRE&gt;</description>
      <pubDate>Thu, 07 Mar 2019 10:32:52 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/To-flag-a-value-according-to-date-value/m-p/541035#M149328</guid>
      <dc:creator>RW9</dc:creator>
      <dc:date>2019-03-07T10:32:52Z</dc:date>
    </item>
    <item>
      <title>Re: To flag a value according to date value</title>
      <link>https://communities.sas.com/t5/SAS-Programming/To-flag-a-value-according-to-date-value/m-p/541037#M149330</link>
      <description>&lt;P&gt;Something like this, perhaps?&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
  input Id visits val date1: date9. date2 date9.;
  format date1 date2 date9.;
cards;
101 1 2.4 02jan2019 05jan2019
101 2 4 05jan2019 05jan2019
101 3 5 10jan2019 05jan2019
102 1 6 05jan2019 15jan2019
102 2 7 12jan2019 15jan2019
102 3 8 15jan2019 15jan2019
103 1 2.3 17jan2019 20jan2019
103 2 6 18jan2019 20jan2019
103 3 8 19jan2019 20jan2019
;run;

data flagged;
  set have;
  where date1&amp;lt;date2;
  by id;
  if last.id;
  retain flag 'Y';
run;

data want;
  merge have flagged;
  by id date1 date2;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 07 Mar 2019 10:34:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/To-flag-a-value-according-to-date-value/m-p/541037#M149330</guid>
      <dc:creator>s_lassen</dc:creator>
      <dc:date>2019-03-07T10:34:33Z</dc:date>
    </item>
    <item>
      <title>Re: To flag a value according to date value</title>
      <link>https://communities.sas.com/t5/SAS-Programming/To-flag-a-value-according-to-date-value/m-p/541047#M149333</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
  input Id visits val date1: date9. date2 date9.;
  format date1 date2 date9.;
cards;
101 1 2.4 02jan2019 05jan2019
101 2 4 05jan2019 05jan2019
101 3 5 10jan2019 05jan2019
102 1 6 05jan2019 15jan2019
102 2 7 12jan2019 15jan2019
102 3 8 15jan2019 15jan2019
103 1 2.3 17jan2019 20jan2019
103 2 6 18jan2019 20jan2019
103 3 8 19jan2019 20jan2019
;run;
data temp;
 set have;
 by id;
 if first.id or missing(val) or date1 ge date2 then group+1;
run;
data want;
 set temp;
 by group;
 if last.group and not missing(val) and date1 lt date2 then flag='Y';
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 07 Mar 2019 11:22:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/To-flag-a-value-according-to-date-value/m-p/541047#M149333</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2019-03-07T11:22:48Z</dc:date>
    </item>
    <item>
      <title>Re: To flag a value according to date value</title>
      <link>https://communities.sas.com/t5/SAS-Programming/To-flag-a-value-according-to-date-value/m-p/541060#M149339</link>
      <description>&lt;P&gt;If performance is an issue, consider a double do loop:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
  input Id visits val date1: date9. date2 date9.;
  format date1 date2 date9.;
cards;
101 1 2.4 02jan2019 05jan2019
101 2 4 05jan2019 05jan2019
101 3 5 10jan2019 05jan2019
102 1 6 05jan2019 15jan2019
102 2 7 12jan2019 15jan2019
102 3 8 15jan2019 15jan2019
103 1 2.3 17jan2019 20jan2019
103 2 6 18jan2019 20jan2019
103 3 8 19jan2019 20jan2019
;
run;

data want;
do until (last.id);
  set have;
  by id;
  if date1 &amp;lt; date2
  then do;
    _date1 = date1;
    _date2 = date2;
  end;
end;
do until (last.id);
  set have;
  by id;
  if date1 = _date1 and date2 = _date2
  then flag = 'Y';
  else flag = ' ';
  output;
end;
drop _date1 _date2;
run;

proc print data=want noobs;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Result:&lt;/P&gt;
&lt;PRE&gt; Id    visits    val        date1        date2    flag

101       1      2.4    02JAN2019    05JAN2019     Y  
101       2      4.0    05JAN2019    05JAN2019        
101       3      5.0    10JAN2019    05JAN2019        
102       1      6.0    05JAN2019    15JAN2019        
102       2      7.0    12JAN2019    15JAN2019     Y  
102       3      8.0    15JAN2019    15JAN2019        
103       1      2.3    17JAN2019    20JAN2019        
103       2      6.0    18JAN2019    20JAN2019        
103       3      8.0    19JAN2019    20JAN2019     Y  
&lt;/PRE&gt;</description>
      <pubDate>Thu, 07 Mar 2019 12:36:59 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/To-flag-a-value-according-to-date-value/m-p/541060#M149339</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2019-03-07T12:36:59Z</dc:date>
    </item>
    <item>
      <title>Re: To flag a value according to date value</title>
      <link>https://communities.sas.com/t5/SAS-Programming/To-flag-a-value-according-to-date-value/m-p/541095#M149361</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
data have;
  input Id visits val date1: date9. date2 date9.;
  format date1 date2 date9.;
cards;
101 1 2.4 02jan2019 05jan2019
101 2 4 05jan2019 05jan2019
101 3 5 10jan2019 05jan2019
102 1 6 05jan2019 15jan2019
102 2 7 12jan2019 15jan2019
102 3 8 15jan2019 15jan2019
103 1 2.3 17jan2019 20jan2019
103 2 6 18jan2019 20jan2019
103 3 8 19jan2019 20jan2019
;
run;

proc sql;
create table want(drop=t) as
select *,date1&amp;lt;date2 as t,ifc(calculated t and max(date1)=date1,'Y',' ') as Flag
from have
group by id,t
order by id,date1,date2;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 07 Mar 2019 14:33:20 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/To-flag-a-value-according-to-date-value/m-p/541095#M149361</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2019-03-07T14:33:20Z</dc:date>
    </item>
  </channel>
</rss>

