<?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: Identify ids with consecutive values meeting threshold in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Identify-ids-with-consecutive-values-meeting-threshold/m-p/498171#M132315</link>
    <description>&lt;P&gt;Extract those IDs with:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
do until(last.id);
    set have; by id;
    if met then if value &amp;gt;= 180 then consec = 1;
    met = value &amp;gt;= 180;
    end;
do until(last.id);
    set have; by id;
    if consec then output;
    end;
drop met consec;
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Sun, 23 Sep 2018 05:06:54 GMT</pubDate>
    <dc:creator>PGStats</dc:creator>
    <dc:date>2018-09-23T05:06:54Z</dc:date>
    <item>
      <title>Identify ids with consecutive values meeting threshold</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Identify-ids-with-consecutive-values-meeting-threshold/m-p/498039#M132227</link>
      <description>&lt;P&gt;Hello all!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have a dataset for which I need to identify ids that had two consecutive values of ≥180.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Below is a sample dataset:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Id&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;date&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;value&lt;/P&gt;&lt;P&gt;1&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;1/3/15&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;140&lt;/P&gt;&lt;P&gt;1&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;2/9/15&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;145&lt;/P&gt;&lt;P&gt;1&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;3/4/15&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;132&lt;/P&gt;&lt;P&gt;2&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;1/8/16&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;150&lt;/P&gt;&lt;P&gt;2&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;2/15/16&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;180&lt;/P&gt;&lt;P&gt;2&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;3/14/16&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;181&lt;/P&gt;&lt;P&gt;3&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;1/1/15&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;110&lt;/P&gt;&lt;P&gt;3&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;2/1/15&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;180&lt;/P&gt;&lt;P&gt;3&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;3/1/15&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;190&lt;/P&gt;&lt;P&gt;4&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;1/7/17&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;130&lt;/P&gt;&lt;P&gt;4&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;2/8/17&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;180&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;From this example,&amp;nbsp;I would want to identify that id 2 and id 3 had two consecutive values of ≥180.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Any advice?&lt;/P&gt;</description>
      <pubDate>Sat, 22 Sep 2018 04:40:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Identify-ids-with-consecutive-values-meeting-threshold/m-p/498039#M132227</guid>
      <dc:creator>SarahW13</dc:creator>
      <dc:date>2018-09-22T04:40:10Z</dc:date>
    </item>
    <item>
      <title>Re: Identify ids with consecutive values meeting threshold</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Identify-ids-with-consecutive-values-meeting-threshold/m-p/498040#M132228</link>
      <description>&lt;P&gt;Retain a flag variable, use by id;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;if first.id then flag = 0;
if not first.id and lag(value) &amp;gt;= 180 and value &amp;gt;= 180 then flag = 1;
if last.id and flag then output;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="1 2 3 4 5 6 7"&gt;&lt;EM&gt;Edit: changed second comparison from "greater" (&amp;gt;) to "greater or equal" (&amp;gt;=).&lt;/EM&gt;&lt;/FONT&gt; &lt;/P&gt;</description>
      <pubDate>Mon, 24 Sep 2018 07:37:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Identify-ids-with-consecutive-values-meeting-threshold/m-p/498040#M132228</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2018-09-24T07:37:19Z</dc:date>
    </item>
    <item>
      <title>Re: Identify ids with consecutive values meeting threshold</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Identify-ids-with-consecutive-values-meeting-threshold/m-p/498119#M132278</link>
      <description>&lt;P&gt;That looks like the right set of tools, but you might need to tweak the program.&amp;nbsp; I could be wrong (can't test it right now), but the program might erroneously flag this situation:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;ID&amp;nbsp; &amp;nbsp;value&lt;/P&gt;
&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; 100&lt;/P&gt;
&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; 200&lt;/P&gt;
&lt;P&gt;2&amp;nbsp; &amp;nbsp; &amp;nbsp; 100&lt;/P&gt;
&lt;P&gt;2&amp;nbsp; &amp;nbsp; &amp;nbsp; 200&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If that situation turns out to be a problem, here's the fix:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data want;&lt;/P&gt;
&lt;P&gt;set have;&lt;/P&gt;
&lt;P&gt;by id;&lt;/P&gt;
&lt;P&gt;prior_value = lag(value);&lt;/P&gt;
&lt;P&gt;if first.id then flag=0;&lt;/P&gt;
&lt;P&gt;else if value &amp;gt;= 180 and prior_value &amp;gt;= 180 then flag+1;&lt;/P&gt;
&lt;P&gt;if last.id and flag;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sat, 22 Sep 2018 21:28:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Identify-ids-with-consecutive-values-meeting-threshold/m-p/498119#M132278</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2018-09-22T21:28:26Z</dc:date>
    </item>
    <item>
      <title>Re: Identify ids with consecutive values meeting threshold</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Identify-ids-with-consecutive-values-meeting-threshold/m-p/498171#M132315</link>
      <description>&lt;P&gt;Extract those IDs with:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
do until(last.id);
    set have; by id;
    if met then if value &amp;gt;= 180 then consec = 1;
    met = value &amp;gt;= 180;
    end;
do until(last.id);
    set have; by id;
    if consec then output;
    end;
drop met consec;
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Sun, 23 Sep 2018 05:06:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Identify-ids-with-consecutive-values-meeting-threshold/m-p/498171#M132315</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2018-09-23T05:06:54Z</dc:date>
    </item>
    <item>
      <title>Re: Identify ids with consecutive values meeting threshold</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Identify-ids-with-consecutive-values-meeting-threshold/m-p/498301#M132388</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/4954"&gt;@Astounding&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;
&lt;P&gt;That looks like the right set of tools, but you might need to tweak the program.&amp;nbsp; I could be wrong (can't test it right now), but the program might erroneously flag this situation:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;ID&amp;nbsp; &amp;nbsp;value&lt;/P&gt;
&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; 100&lt;/P&gt;
&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; 200&lt;/P&gt;
&lt;P&gt;2&amp;nbsp; &amp;nbsp; &amp;nbsp; 100&lt;/P&gt;
&lt;P&gt;2&amp;nbsp; &amp;nbsp; &amp;nbsp; 200&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If that situation turns out to be a problem, here's the fix:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data want;&lt;/P&gt;
&lt;P&gt;set have;&lt;/P&gt;
&lt;P&gt;by id;&lt;/P&gt;
&lt;P&gt;prior_value = lag(value);&lt;/P&gt;
&lt;P&gt;if first.id then flag=0;&lt;/P&gt;
&lt;P&gt;else if value &amp;gt;= 180 and prior_value &amp;gt;= 180 then flag+1;&lt;/P&gt;
&lt;P&gt;if last.id and flag;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Just checked it:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input id value;
cards;
1      100
1      200
2      100
2      200
;
run;

data want (keep=id);
set have;
by id;
retain flag;
if first.id then flag = 0;
if not first.id and lag(value) &amp;gt;= 180 and value &amp;gt;= 180 then flag = 1;
if last.id and flag then output;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Result is an empty dataset, as it should be. SAS does not optimize the if condition, so the lag() function is reliably executed in every iteration.&lt;/P&gt;
&lt;P&gt;That's why I specifically omitted the "obvious" else for the check of "first.id", and used a separate check for "not first.id" instead.&lt;/P&gt;</description>
      <pubDate>Mon, 24 Sep 2018 07:35:49 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Identify-ids-with-consecutive-values-meeting-threshold/m-p/498301#M132388</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2018-09-24T07:35:49Z</dc:date>
    </item>
  </channel>
</rss>

