<?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: Add 1 to flag if previous row value doesn't match with current flag following certain condition in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Add-1-to-flag-if-previous-row-value-doesn-t-match-with-current/m-p/696619#M212810</link>
    <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/355522"&gt;@John04&lt;/a&gt;&amp;nbsp; Seems nothing more than a pretty straight forward &lt;STRONG&gt;BY GROUP&lt;/STRONG&gt; processing and &lt;STRONG&gt;counter&lt;/STRONG&gt; logic i.e. assuming I correctly understand your requirement, which I can believe I have?-&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
data have;
	input Id YearMonth Flag;
	datalines;
1  200101    1
1  200102    1
1  200103    0
1  200104    1
1  200105    1
1  200106    0
1  200107    1
1  200108    0
2  200101    0
2  200102    0
2  200103    1
2  200104    1
2  200105    0
2  200106    0
2  200107    1
2  200108    0
;
run;

data want;
 _n_=0;
 do until(last.id);
   set have;
   by id flag notsorted;
   if first.id and first.flag and not flag then _n_=2;
   else if first.flag and _n_&amp;lt;4 then _n_=sum(_n_,1);
   if _n_=4 then stage=ifn(flag,3,4);
   else stage=_n_;
   output;
 end;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Thu, 05 Nov 2020 02:15:58 GMT</pubDate>
    <dc:creator>novinosrin</dc:creator>
    <dc:date>2020-11-05T02:15:58Z</dc:date>
    <item>
      <title>Add 1 to flag if previous row value doesn't match with current flag following certain condition</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Add-1-to-flag-if-previous-row-value-doesn-t-match-with-current/m-p/696566#M212789</link>
      <description>&lt;P&gt;I have a table that is being created, we will say that column 1 is Id, column2 is YearMonth and column3 is Flag.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;data have; input 
Id YearMonth Flag; datalines;
1  200101    1
1  200102    1
1  200103    0
1  200104    1
1  200105    1
1  200106    0
1  200107    1
1  200108    0
2  200101    0
2  200102    0
2  200103    1
2  200104    1
2  200105    0
2  200106    0
2  200107    1
2  200108    0
;&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I want to add 1 to flag if current flag doesn't match with previous row value along with two major conditions (explained after output for a better explanation).&lt;/P&gt;&lt;P&gt;The output should be:&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Id&lt;/TD&gt;&lt;TD&gt;YearMonth&lt;/TD&gt;&lt;TD&gt;Flag&lt;/TD&gt;&lt;TD&gt;Stage&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;200001&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;1&lt;/TD&gt;&lt;TD&gt;200002&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;1&lt;/TD&gt;&lt;TD&gt;200003&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;200004&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;200005&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;200006&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;200007&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;200008&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;200001&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;200002&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;200003&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;200004&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;200005&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;200006&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;200007&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;200008&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Condition-1: There are only 4 stages. Hence if a flag is repeated after stage 4, then it should not increment and should give output as either stage=3 if flag=1 or stage=4 if flag=0.&lt;/P&gt;&lt;P&gt;Condition-2: If first entry of an Id is 0 then the stage should start with 2 not 1.&lt;/P&gt;&lt;P&gt;I am trying something like this (helped by Richard user:1249962 (stackoverflow))&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want(drop=maxstage_reached);
set have;
if flag ne lag(flag) then stage+1;                * increment per rules;
if stage = 4 then maxstage_reached=1;             * tracking flag (retained);
if maxstage_reached then stage = 4 - flag;        * special rule;
retain maxstage_reached;
run;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;Currently I am struggling with:&lt;/P&gt;&lt;P&gt;1)group by Id; I am trying to use "by" but it doesnt work&lt;/P&gt;&lt;P&gt;2)Condition-2&lt;/P&gt;&lt;P&gt;Thank you!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 04 Nov 2020 16:00:00 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Add-1-to-flag-if-previous-row-value-doesn-t-match-with-current/m-p/696566#M212789</guid>
      <dc:creator>John04</dc:creator>
      <dc:date>2020-11-04T16:00:00Z</dc:date>
    </item>
    <item>
      <title>Re: Add 1 to flag if previous row value doesn't match with current flag following certain condition</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Add-1-to-flag-if-previous-row-value-doesn-t-match-with-current/m-p/696589#M212799</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
	input Id YearMonth Flag;
	datalines;
1  200101    1
1  200102    1
1  200103    0
1  200104    1
1  200105    1
1  200106    0
1  200107    1
1  200108    0
2  200101    0
2  200102    0
2  200103    1
2  200104    1
2  200105    0
2  200106    0
2  200107    1
2  200108    0
;
run;

data want;
	do until(last.id);
		lagflag=_N_;
		set have;
		by id;
		_N_=flag;

		if first.id then
			do;
				lagflag=flag;
				cnt=id;
			end;
		else if flag ne lagflag then
			do;
				cnt+1;
			end;

		if cnt&amp;gt;4 and lag(cnt)=4 and flag=1 then
			do;
				cnt=3;
			end;
		else if cnt&amp;gt;4 and lag(cnt)=4 and flag=0 then
			do;
				cnt=4;
			end;
		output;
	end;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 04 Nov 2020 16:56:55 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Add-1-to-flag-if-previous-row-value-doesn-t-match-with-current/m-p/696589#M212799</guid>
      <dc:creator>hhinohar</dc:creator>
      <dc:date>2020-11-04T16:56:55Z</dc:date>
    </item>
    <item>
      <title>Re: Add 1 to flag if previous row value doesn't match with current flag following certain condition</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Add-1-to-flag-if-previous-row-value-doesn-t-match-with-current/m-p/696619#M212810</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/355522"&gt;@John04&lt;/a&gt;&amp;nbsp; Seems nothing more than a pretty straight forward &lt;STRONG&gt;BY GROUP&lt;/STRONG&gt; processing and &lt;STRONG&gt;counter&lt;/STRONG&gt; logic i.e. assuming I correctly understand your requirement, which I can believe I have?-&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
data have;
	input Id YearMonth Flag;
	datalines;
1  200101    1
1  200102    1
1  200103    0
1  200104    1
1  200105    1
1  200106    0
1  200107    1
1  200108    0
2  200101    0
2  200102    0
2  200103    1
2  200104    1
2  200105    0
2  200106    0
2  200107    1
2  200108    0
;
run;

data want;
 _n_=0;
 do until(last.id);
   set have;
   by id flag notsorted;
   if first.id and first.flag and not flag then _n_=2;
   else if first.flag and _n_&amp;lt;4 then _n_=sum(_n_,1);
   if _n_=4 then stage=ifn(flag,3,4);
   else stage=_n_;
   output;
 end;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 05 Nov 2020 02:15:58 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Add-1-to-flag-if-previous-row-value-doesn-t-match-with-current/m-p/696619#M212810</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2020-11-05T02:15:58Z</dc:date>
    </item>
    <item>
      <title>Re: Add 1 to flag if previous row value doesn't match with current flag following certain condition</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Add-1-to-flag-if-previous-row-value-doesn-t-match-with-current/m-p/696623#M212811</link>
      <description>I understand what you have done! I am still trying to understand why my code is not working. Can you suggest? Thanks</description>
      <pubDate>Wed, 04 Nov 2020 18:14:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Add-1-to-flag-if-previous-row-value-doesn-t-match-with-current/m-p/696623#M212811</guid>
      <dc:creator>John04</dc:creator>
      <dc:date>2020-11-04T18:14:39Z</dc:date>
    </item>
  </channel>
</rss>

