<?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: Retain a flag for X number of months in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Retain-a-flag-for-X-number-of-months/m-p/377431#M276719</link>
    <description>&lt;P&gt;Hi Ksharp,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks for your reply.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This solution works perfectly - I&amp;nbsp;can see how you incorporated the counter and retain (something I didn't even think of trying!).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am sure I will be able to use adaptations of this code for future problems.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Once again, this is much appreciated.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Pete&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Wed, 19 Jul 2017 16:09:55 GMT</pubDate>
    <dc:creator>PetePatel</dc:creator>
    <dc:date>2017-07-19T16:09:55Z</dc:date>
    <item>
      <title>Retain a flag for X number of months</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Retain-a-flag-for-X-number-of-months/m-p/377318#M276714</link>
      <description>&lt;P&gt;Hello SAS Experts,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have a dataset with &amp;gt;10,000 ID's and observation months ranging from 2007 to 2017.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Please see a sample dataset with two ID's below.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;When 'trigger=1' I have created 'ED' (effective duration) which defines how many months&amp;nbsp;the 'desired' flag&amp;nbsp;should be switched on for each unqiue ID. The 'desired' flag is what I am trying to get to and should not be overwitten by the next observation (for example ID=2 at Oct-15, the 'desired' flag should remain switched on due to ED=4 at Aug-15).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;In addition, if the ED is greater than the number of observations for that account the 'desired' flag should continue to be switched on until the last observation without producing an error.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have been trying a combination of retain statements and lag functions but struggling to get to the 'desired' solution.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Any help would be greatly appreciated.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;Pete&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;Month&lt;/TD&gt;&lt;TD&gt;flag&lt;/TD&gt;&lt;TD&gt;ED&lt;/TD&gt;&lt;TD&gt;desired&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Jan-12&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Feb-12&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Mar-12&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Apr-12&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;May-12&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Jun-12&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Jul-12&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Aug-12&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Sep-12&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Oct-12&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Nov-12&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Dec-12&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;Jul-15&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;Aug-15&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;Sep-15&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;Oct-15&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;Nov-15&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;Dec-15&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;Jan-16&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;Feb-16&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;Jan-16&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;Feb-16&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;Mar-16&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;Apr-16&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
      <pubDate>Wed, 19 Jul 2017 13:39:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Retain-a-flag-for-X-number-of-months/m-p/377318#M276714</guid>
      <dc:creator>PetePatel</dc:creator>
      <dc:date>2017-07-19T13:39:01Z</dc:date>
    </item>
    <item>
      <title>Re: Retain a flag for X number of months</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Retain-a-flag-for-X-number-of-months/m-p/377349#M276715</link>
      <description>&lt;P&gt;Here is one way:&lt;/P&gt;
&lt;PRE&gt;data want (drop=hold_ED);
  set have;
  retain hold_ED;
  hold_ED=max(ED,hold_ED);
  if hold_ED gt 0 then desired=1;
  else desired=0;
  hold_ED=hold_ED-1;
run;
&lt;/PRE&gt;
&lt;P&gt;Art, CEO, AnalystFinder.com&lt;/P&gt;</description>
      <pubDate>Wed, 19 Jul 2017 14:22:05 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Retain-a-flag-for-X-number-of-months/m-p/377349#M276715</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2017-07-19T14:22:05Z</dc:date>
    </item>
    <item>
      <title>Re: Retain a flag for X number of months</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Retain-a-flag-for-X-number-of-months/m-p/377353#M276716</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile cards expandtabs truncover;
input ID	Month $ 	flag	ED	;
cards;
1	Jan-12	0	0	0
1	Feb-12	0	0	0
1	Mar-12	0	0	0
1	Apr-12	1	3	1
1	May-12	0	0	1
1	Jun-12	0	0	1
1	Jul-12	0	0	0
1	Aug-12	1	2	1
1	Sep-12	0	0	1
1	Oct-12	0	0	0
1	Nov-12	0	0	0
1	Dec-12	0	0	0
2	Jul-15	0	0	0
2	Aug-15	1	4	1
2	Sep-15	1	1	1
2	Oct-15	1	0	1
2	Nov-15	0	0	1
2	Dec-15	0	0	0
2	Jan-16	0	0	0
2	Feb-16	0	0	0
3	Jan-16	1	10	1
3	Feb-16	0	0	1
3	Mar-16	0	0	1
3	Apr-16	0	0
;
run;
data temp;
 set have;
 by id;
 if first.id then n=0;
  n+1;
run;
data k;
 set temp;
 if ed ;
run;
data key;
 set k;
 retain desired 1;
 _n=n;
 do i=0 to ed-1;
  n=_n+i;output;
 end;
 keep id desired n;
run;
proc sort data=key out=unique nodupkey;
 by id n;
run;
data want;
 merge temp(in=ina) unique;
 by id n;
 if ina;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 19 Jul 2017 14:33:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Retain-a-flag-for-X-number-of-months/m-p/377353#M276716</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2017-07-19T14:33:24Z</dc:date>
    </item>
    <item>
      <title>Re: Retain a flag for X number of months</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Retain-a-flag-for-X-number-of-months/m-p/377408#M276717</link>
      <description>&lt;P&gt;Hi art291,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you for your reply.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The solution works great in principle but does not&amp;nbsp;reset when moving onto the next ID.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;For example, ID=3 at Jan-16 ED=10, where 'desired' flag should be switched on up to and including Apr-16 only. ID=4 should then reset and start the process again.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I tried retaining by ID but currently unable to get it to work.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;Jan-16&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;Feb-16&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;Mar-16&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;Apr-16&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;Jan-12&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;Feb-12&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;Mar-12&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;Apr-12&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;May-12&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
      <pubDate>Wed, 19 Jul 2017 15:45:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Retain-a-flag-for-X-number-of-months/m-p/377408#M276717</guid>
      <dc:creator>PetePatel</dc:creator>
      <dc:date>2017-07-19T15:45:22Z</dc:date>
    </item>
    <item>
      <title>Re: Retain a flag for X number of months</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Retain-a-flag-for-X-number-of-months/m-p/377420#M276718</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/154786"&gt;@PetePatel&lt;/a&gt;: The following will account for changes in ID:&lt;/P&gt;
&lt;PRE&gt;data want (drop=hold_ED);
  set have;
  by id;
  retain hold_ED;
  if first.id then hold_ED=ED;
  else hold_ED=max(ED,hold_ED);
  if hold_ED gt 0 then desired=1;
  else desired=0;
  hold_ED=hold_ED-1;
run;
&lt;/PRE&gt;
&lt;P&gt;Art, CEO, AnalystFinder.com&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 19 Jul 2017 15:56:50 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Retain-a-flag-for-X-number-of-months/m-p/377420#M276718</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2017-07-19T15:56:50Z</dc:date>
    </item>
    <item>
      <title>Re: Retain a flag for X number of months</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Retain-a-flag-for-X-number-of-months/m-p/377431#M276719</link>
      <description>&lt;P&gt;Hi Ksharp,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks for your reply.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This solution works perfectly - I&amp;nbsp;can see how you incorporated the counter and retain (something I didn't even think of trying!).&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am sure I will be able to use adaptations of this code for future problems.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Once again, this is much appreciated.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Pete&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 19 Jul 2017 16:09:55 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Retain-a-flag-for-X-number-of-months/m-p/377431#M276719</guid>
      <dc:creator>PetePatel</dc:creator>
      <dc:date>2017-07-19T16:09:55Z</dc:date>
    </item>
    <item>
      <title>Re: Retain a flag for X number of months</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Retain-a-flag-for-X-number-of-months/m-p/377434#M276720</link>
      <description>&lt;P&gt;Perfect, thank you!&lt;/P&gt;</description>
      <pubDate>Wed, 19 Jul 2017 16:13:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Retain-a-flag-for-X-number-of-months/m-p/377434#M276720</guid>
      <dc:creator>PetePatel</dc:creator>
      <dc:date>2017-07-19T16:13:53Z</dc:date>
    </item>
  </channel>
</rss>

