<?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: Find # of rows that share a condition in a by-group in SAS Procedures</title>
    <link>https://communities.sas.com/t5/SAS-Procedures/Find-of-rows-that-share-a-condition-in-a-by-group/m-p/187101#M47521</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;data have;&lt;/P&gt;&lt;P&gt;infile cards;&lt;/P&gt;&lt;P&gt;length id 4 trns_qtr $6 val_a 8 val_b 8;&lt;/P&gt;&lt;P&gt;input id trns_qtr val_a val_b;&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;100 2010Q1 1456 345&lt;/P&gt;&lt;P&gt;100 2010Q2 2500 0&lt;/P&gt;&lt;P&gt;100 2010Q3 2500 0&lt;/P&gt;&lt;P&gt;100 2010Q4 2500 0&lt;/P&gt;&lt;P&gt;200 2010Q4 0 1200&lt;/P&gt;&lt;P&gt;200 2011Q1 3100 0&lt;/P&gt;&lt;P&gt;200 2011Q2 3200 0&lt;/P&gt;&lt;P&gt;200 2011Q3 3100 0&lt;/P&gt;&lt;P&gt;200 2011Q4 3300 0&lt;/P&gt;&lt;P&gt;200 2012Q1 2500 12876&lt;/P&gt;&lt;P&gt;300 2009Q4 2390 0&lt;/P&gt;&lt;P&gt;300 2010Q1 4300 0&lt;/P&gt;&lt;P&gt;300 2010Q2 2300 678&lt;/P&gt;&lt;P&gt;300 2010Q3 5600 0&lt;/P&gt;&lt;P&gt;300 2010Q4 5600 0&lt;/P&gt;&lt;P&gt;300 2011Q1 2500 0&lt;/P&gt;&lt;P&gt;300 2011Q2 3200 0&lt;/P&gt;&lt;P&gt;300 2011Q3 3100 0&lt;/P&gt;&lt;P&gt;300 2011Q4 3300 12876&lt;/P&gt;&lt;P&gt;300 2012Q1 3200 0&lt;/P&gt;&lt;P&gt;300 2012Q1 3100 0&lt;/P&gt;&lt;P&gt;300 2012Q2 3300 0&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%let compare_qtr=2012Q2;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* solution of 1 &amp;amp; 2 */&lt;/P&gt;&lt;P&gt;data want1 (keep=id number startq endq flag);&lt;/P&gt;&lt;P&gt;set have;&lt;/P&gt;&lt;P&gt;by id;&lt;/P&gt;&lt;P&gt;retain startq endq number;&lt;/P&gt;&lt;P&gt;if first.id then number = .;&lt;/P&gt;&lt;P&gt;if val_b = 0&lt;/P&gt;&lt;P&gt;then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; endq = trns_qtr;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if number = .&lt;/P&gt;&lt;P&gt;&amp;nbsp; then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; number = 1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; startq = trns_qtr;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; else number + 1;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;else do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if number ne .&lt;/P&gt;&lt;P&gt;&amp;nbsp; then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if endq = "&amp;amp;compare_qtr"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; then flag = 1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else flag = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; number = .;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;if last.id and number ne .&lt;/P&gt;&lt;P&gt;then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; endq = trns_qtr;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if endq = "&amp;amp;compare_qtr"&lt;/P&gt;&lt;P&gt;&amp;nbsp; then flag = 1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; else flag = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* solution of 3 */&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;create table want2 as&lt;/P&gt;&lt;P&gt;select&lt;/P&gt;&lt;P&gt;&amp;nbsp; count(distinct id) as id&lt;/P&gt;&lt;P&gt;from want1&lt;/P&gt;&lt;P&gt;where flag = 1 and number ge 3&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Wed, 26 Nov 2014 11:40:19 GMT</pubDate>
    <dc:creator>Kurt_Bremser</dc:creator>
    <dc:date>2014-11-26T11:40:19Z</dc:date>
    <item>
      <title>Find # of rows that share a condition in a by-group</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Find-of-rows-that-share-a-condition-in-a-by-group/m-p/187097#M47517</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Dear all,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have a data set grouped by ID and Transaction_Quarter as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style="text-decoration: underline;"&gt;ID&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN style="text-decoration: underline;"&gt;Trns_QTR&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN style="text-decoration: underline;"&gt;Val_A&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="text-decoration: underline;"&gt;Val_B&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;100&amp;nbsp;&amp;nbsp; 2010Q1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1456&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 345&lt;/P&gt;&lt;P&gt;100&amp;nbsp;&amp;nbsp; 2010Q2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2500&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;/P&gt;&lt;P&gt;100&amp;nbsp;&amp;nbsp; 2010Q3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2500&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;/P&gt;&lt;P&gt;100&amp;nbsp;&amp;nbsp; 2010Q4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2500&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;200&amp;nbsp;&amp;nbsp; 2010Q4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1200&lt;/P&gt;&lt;P&gt;200&amp;nbsp;&amp;nbsp; 2011Q1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3100&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;/P&gt;&lt;P&gt;200&amp;nbsp;&amp;nbsp; 2011Q2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3200&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;/P&gt;&lt;P&gt;200&amp;nbsp;&amp;nbsp; 2011Q3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3100&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;/P&gt;&lt;P&gt;200&amp;nbsp;&amp;nbsp; 2011Q4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3300&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;/P&gt;&lt;P&gt;200&amp;nbsp;&amp;nbsp; 2012Q1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2500&amp;nbsp;&amp;nbsp;&amp;nbsp; 12876&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;300&amp;nbsp;&amp;nbsp; 2019Q4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2390&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;/P&gt;&lt;P&gt;300&amp;nbsp;&amp;nbsp; 2010Q1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4300&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;/P&gt;&lt;P&gt;300&amp;nbsp;&amp;nbsp; 2010Q2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2300&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 678&lt;/P&gt;&lt;P&gt;300&amp;nbsp;&amp;nbsp; 2010Q3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5600&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;/P&gt;&lt;P&gt;300&amp;nbsp;&amp;nbsp; 2010Q4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5600&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;/P&gt;&lt;P&gt;300&amp;nbsp;&amp;nbsp; 2011Q1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2500&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 &lt;/P&gt;&lt;P&gt;300&amp;nbsp;&amp;nbsp; 2011Q2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3200&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;/P&gt;&lt;P&gt;300&amp;nbsp;&amp;nbsp; 2011Q3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3100&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;/P&gt;&lt;P&gt;300&amp;nbsp;&amp;nbsp; 2011Q4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3300&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12876&lt;/P&gt;&lt;P&gt;300&amp;nbsp;&amp;nbsp; 2012Q1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3200&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;/P&gt;&lt;P&gt;300&amp;nbsp;&amp;nbsp; 2012Q1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3100&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;/P&gt;&lt;P&gt;300&amp;nbsp;&amp;nbsp; 2012Q2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3300&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I would like to find:&lt;/P&gt;&lt;P&gt;1).-&amp;nbsp; The number(s) of consecutive rows, in chronological order, within a by-group that Val_B = 0 (e.g. for ID 300 I will have three counts&amp;nbsp; 2 , 5, 3) along with their respective and the beginning and ending &lt;STRONG style="text-decoration: underline;"&gt;Trns_QTR&lt;/STRONG&gt; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.g.&amp;nbsp; 2,&amp;nbsp;&amp;nbsp; 2019Q4&amp;nbsp; - 2010Q1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&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; 5,&amp;nbsp;&amp;nbsp; 2010Q3 -&amp;nbsp; 2011Q3&lt;/P&gt;&lt;P&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; 3,&amp;nbsp;&amp;nbsp; 2012Q1 -&amp;nbsp; 2012Q2&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;2).-&amp;nbsp; Create a Flag that will show whether the last &lt;STRONG style="text-decoration: underline;"&gt;Trns_QTR equals a given value i.e. 2012Q2 ,&lt;/STRONG&gt; of the latest "subgroup" (of consecutive zeros).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;3).- Count the number of ID's that have count of consecutive Val_B,&amp;nbsp; 0's&amp;nbsp; GT 3 and its &lt;STRONG style="text-decoration: underline;"&gt;Trns_QTR equals a given value i.e. 2012Q2&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Any feedback would be much appreciated&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanking you in advance.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Best regards&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Nikos&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 26 Nov 2014 07:56:56 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Find-of-rows-that-share-a-condition-in-a-by-group/m-p/187097#M47517</guid>
      <dc:creator>Nikos</dc:creator>
      <dc:date>2014-11-26T07:56:56Z</dc:date>
    </item>
    <item>
      <title>Re: Find # of rows that share a condition in a by-group</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Find-of-rows-that-share-a-condition-in-a-by-group/m-p/187098#M47518</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I think this requires a multi-step approach. One answer to 1) could be:&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;Data A;&lt;BR /&gt;&amp;nbsp; Input ID Trns_QTR:YYQ. Val_A Val_B;&lt;BR /&gt;&amp;nbsp; format Trns_Qtr YYQs6.;&lt;BR /&gt;&amp;nbsp; Datalines;&lt;BR /&gt;100 2010Q1 1456 345&lt;BR /&gt;100 2010Q2 2500 0&lt;BR /&gt;100 2010Q3 2500 0&lt;BR /&gt;100 2010Q4 2500 0&lt;BR /&gt;200 2010Q4 0 1200&lt;BR /&gt;200 2011Q1 3100 0&lt;BR /&gt;200 2011Q2 3200 0&lt;BR /&gt;200 2011Q3 3100 0&lt;BR /&gt;200 2011Q4 3300 0&lt;BR /&gt;200 2012Q1 2500 12876&lt;BR /&gt;300 2019Q4 2390 0&lt;BR /&gt;300 2010Q1 4300 0&lt;BR /&gt;300 2010Q2 2300 678&lt;BR /&gt;300 2010Q3 5600 0&lt;BR /&gt;300 2010Q4 5600 0&lt;BR /&gt;300 2011Q1 2500 0 &lt;BR /&gt;300 2011Q2 3200 0&lt;BR /&gt;300 2011Q3 3100 0&lt;BR /&gt;300 2011Q4 3300 12876&lt;BR /&gt;300 2012Q1 3200 0&lt;BR /&gt;300 2012Q1 3100 0&lt;BR /&gt;300 2012Q2 3300 0&lt;BR /&gt;;&lt;BR /&gt;Run;&lt;/P&gt;&lt;P&gt;* create new ID;&lt;BR /&gt;Data B ;&lt;BR /&gt;&amp;nbsp; Length ID_dummy $100.;&lt;BR /&gt;&amp;nbsp; Set A;&lt;BR /&gt;&amp;nbsp; Retain dummy;&lt;BR /&gt;&amp;nbsp; By ID;&lt;BR /&gt;&amp;nbsp; If First.ID Then dummy=IfN(Val_B eq 0,1,0);&lt;BR /&gt;&amp;nbsp; Else Do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If Val_B eq 0 &amp;amp; dummy eq 0 Then dummy=1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Else If Val_B gt 0 Then dummy+1;&lt;BR /&gt;&amp;nbsp; End;&lt;BR /&gt;&amp;nbsp; If Val_B ne 0 Then Nr=0; Else Nr=dummy;&lt;BR /&gt;&amp;nbsp; If Nr ne 0;&lt;BR /&gt;&amp;nbsp; ID_dummy=Catt(Put(ID,Z3.),'_',Put(Nr,Z2.));&lt;BR /&gt;&amp;nbsp; One=1;&lt;BR /&gt;Run;&lt;/P&gt;&lt;P&gt;* get length;&lt;BR /&gt;Data C (Keep=ID Trns_Qtr Total ID_dummy);&lt;BR /&gt;&amp;nbsp; Do i=1 By 1 Until (Last.ID_dummy);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set B;&lt;BR /&gt; By ID_dummy;&lt;BR /&gt; Total=Sum(One,Total);&lt;BR /&gt;&amp;nbsp; End;&lt;BR /&gt;&amp;nbsp; Do Until (Last.ID_dummy);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set B;&lt;BR /&gt; By ID_dummy;&lt;BR /&gt; Output;&lt;BR /&gt;&amp;nbsp; End;&lt;BR /&gt;Run;&lt;/P&gt;&lt;P&gt;* save first and last;&lt;BR /&gt;Data D;&lt;BR /&gt;&amp;nbsp; Length Col $10.;&lt;BR /&gt;&amp;nbsp; Set C;&lt;BR /&gt;&amp;nbsp; By ID_dummy;&lt;BR /&gt;&amp;nbsp; If First.ID_dummy Then Do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Col="Start"; Output;&lt;BR /&gt;&amp;nbsp; End;&lt;BR /&gt;&amp;nbsp; Else If Last.ID_dummy Then Do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Col="End"; Output;&lt;BR /&gt;&amp;nbsp; End;&lt;BR /&gt;Run;&lt;/P&gt;&lt;P&gt;* transpose;&lt;BR /&gt;Proc Transpose Data=D Out=E (Drop=ID_dummy _NAME_);&lt;BR /&gt;&amp;nbsp; By ID_dummy ID Total;&lt;BR /&gt;&amp;nbsp; Var Trns_Qtr;&lt;BR /&gt;&amp;nbsp; ID Col;&lt;BR /&gt;Run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 26 Nov 2014 09:48:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Find-of-rows-that-share-a-condition-in-a-by-group/m-p/187098#M47518</guid>
      <dc:creator>user24feb</dc:creator>
      <dc:date>2014-11-26T09:48:24Z</dc:date>
    </item>
    <item>
      <title>Re: Find # of rows that share a condition in a by-group</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Find-of-rows-that-share-a-condition-in-a-by-group/m-p/187099#M47519</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Your not really asking a question there are you, more of a write my program for me &lt;img id="smileyhappy" class="emoticon emoticon-smileyhappy" src="https://communities.sas.com/i/smilies/16x16_smiley-happy.png" alt="Smiley Happy" title="Smiley Happy" /&gt;&lt;/P&gt;&lt;P&gt;I note there is a logic error in your test data, the first record of 300 shows 2019 which sequentially would be after all the others??&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;For 1)&lt;/P&gt;&lt;P&gt;data have;&lt;BR /&gt;&amp;nbsp; infile datalines;&lt;BR /&gt;&amp;nbsp; input ID Trns_QTR yyq9. Val_A Val_B;&lt;BR /&gt;datalines;&lt;BR /&gt;300&amp;nbsp;&amp;nbsp; 2019Q4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2390&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR /&gt;300&amp;nbsp;&amp;nbsp; 2010Q1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4300&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR /&gt;300&amp;nbsp;&amp;nbsp; 2010Q2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2300&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 678&lt;BR /&gt;300&amp;nbsp;&amp;nbsp; 2010Q3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5600&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR /&gt;300&amp;nbsp;&amp;nbsp; 2010Q4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5600&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR /&gt;300&amp;nbsp;&amp;nbsp; 2011Q1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2500&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 &lt;BR /&gt;300&amp;nbsp;&amp;nbsp; 2011Q2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3200&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR /&gt;300&amp;nbsp;&amp;nbsp; 2011Q3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3100&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR /&gt;300&amp;nbsp;&amp;nbsp; 2011Q4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3300&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12876&lt;BR /&gt;300&amp;nbsp;&amp;nbsp; 2012Q1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3200&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR /&gt;300&amp;nbsp;&amp;nbsp; 2012Q1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3100&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR /&gt;300&amp;nbsp;&amp;nbsp; 2012Q2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3300&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;BR /&gt;;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;data inter;&lt;BR /&gt;&amp;nbsp; set have;&lt;BR /&gt;&amp;nbsp; by id;&lt;BR /&gt;&amp;nbsp; retain grp;&lt;BR /&gt;&amp;nbsp; if first.id then grp=1;&lt;BR /&gt;&amp;nbsp; if val_b ne 0 then grp=grp+1;&lt;BR /&gt;&amp;nbsp; if val_b=0 or last.id then sel=1;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;proc sql;&lt;BR /&gt;&amp;nbsp; create table WANT as&lt;BR /&gt;&amp;nbsp; select&amp;nbsp; ID,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GRP,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MIN(TRNS_QTR) as FIRST_DATE format=yyq9.,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MAX(TRNS_QTR) as LAST_DATE format=yyq9.,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; COUNT(1) as N&lt;BR /&gt;&amp;nbsp; from&amp;nbsp;&amp;nbsp;&amp;nbsp; (select * from WORK.INTER where SEL=1)&lt;BR /&gt;&amp;nbsp; group by ID,&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GRP;&lt;BR /&gt;quit;&lt;BR /&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;The above should give you a good start on 2 and 3.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 26 Nov 2014 09:54:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Find-of-rows-that-share-a-condition-in-a-by-group/m-p/187099#M47519</guid>
      <dc:creator>RW9</dc:creator>
      <dc:date>2014-11-26T09:54:01Z</dc:date>
    </item>
    <item>
      <title>Re: Find # of rows that share a condition in a by-group</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Find-of-rows-that-share-a-condition-in-a-by-group/m-p/187100#M47520</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi RW9,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You are right.&lt;/P&gt;&lt;P&gt;It should read&amp;nbsp; &lt;SPAN style="font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; background-color: #ffffff;"&gt;2009Q4 (instead of &lt;SPAN style="background-color: #ffffff; text-decoration: line-through; font-family: 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif;"&gt;2019Q4)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 26 Nov 2014 10:35:47 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Find-of-rows-that-share-a-condition-in-a-by-group/m-p/187100#M47520</guid>
      <dc:creator>Nikos</dc:creator>
      <dc:date>2014-11-26T10:35:47Z</dc:date>
    </item>
    <item>
      <title>Re: Find # of rows that share a condition in a by-group</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Find-of-rows-that-share-a-condition-in-a-by-group/m-p/187101#M47521</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;data have;&lt;/P&gt;&lt;P&gt;infile cards;&lt;/P&gt;&lt;P&gt;length id 4 trns_qtr $6 val_a 8 val_b 8;&lt;/P&gt;&lt;P&gt;input id trns_qtr val_a val_b;&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;100 2010Q1 1456 345&lt;/P&gt;&lt;P&gt;100 2010Q2 2500 0&lt;/P&gt;&lt;P&gt;100 2010Q3 2500 0&lt;/P&gt;&lt;P&gt;100 2010Q4 2500 0&lt;/P&gt;&lt;P&gt;200 2010Q4 0 1200&lt;/P&gt;&lt;P&gt;200 2011Q1 3100 0&lt;/P&gt;&lt;P&gt;200 2011Q2 3200 0&lt;/P&gt;&lt;P&gt;200 2011Q3 3100 0&lt;/P&gt;&lt;P&gt;200 2011Q4 3300 0&lt;/P&gt;&lt;P&gt;200 2012Q1 2500 12876&lt;/P&gt;&lt;P&gt;300 2009Q4 2390 0&lt;/P&gt;&lt;P&gt;300 2010Q1 4300 0&lt;/P&gt;&lt;P&gt;300 2010Q2 2300 678&lt;/P&gt;&lt;P&gt;300 2010Q3 5600 0&lt;/P&gt;&lt;P&gt;300 2010Q4 5600 0&lt;/P&gt;&lt;P&gt;300 2011Q1 2500 0&lt;/P&gt;&lt;P&gt;300 2011Q2 3200 0&lt;/P&gt;&lt;P&gt;300 2011Q3 3100 0&lt;/P&gt;&lt;P&gt;300 2011Q4 3300 12876&lt;/P&gt;&lt;P&gt;300 2012Q1 3200 0&lt;/P&gt;&lt;P&gt;300 2012Q1 3100 0&lt;/P&gt;&lt;P&gt;300 2012Q2 3300 0&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%let compare_qtr=2012Q2;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* solution of 1 &amp;amp; 2 */&lt;/P&gt;&lt;P&gt;data want1 (keep=id number startq endq flag);&lt;/P&gt;&lt;P&gt;set have;&lt;/P&gt;&lt;P&gt;by id;&lt;/P&gt;&lt;P&gt;retain startq endq number;&lt;/P&gt;&lt;P&gt;if first.id then number = .;&lt;/P&gt;&lt;P&gt;if val_b = 0&lt;/P&gt;&lt;P&gt;then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; endq = trns_qtr;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if number = .&lt;/P&gt;&lt;P&gt;&amp;nbsp; then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; number = 1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; startq = trns_qtr;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; else number + 1;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;else do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if number ne .&lt;/P&gt;&lt;P&gt;&amp;nbsp; then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if endq = "&amp;amp;compare_qtr"&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; then flag = 1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else flag = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; number = .;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;if last.id and number ne .&lt;/P&gt;&lt;P&gt;then do;&lt;/P&gt;&lt;P&gt;&amp;nbsp; endq = trns_qtr;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if endq = "&amp;amp;compare_qtr"&lt;/P&gt;&lt;P&gt;&amp;nbsp; then flag = 1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; else flag = 0;&lt;/P&gt;&lt;P&gt;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* solution of 3 */&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;create table want2 as&lt;/P&gt;&lt;P&gt;select&lt;/P&gt;&lt;P&gt;&amp;nbsp; count(distinct id) as id&lt;/P&gt;&lt;P&gt;from want1&lt;/P&gt;&lt;P&gt;where flag = 1 and number ge 3&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 26 Nov 2014 11:40:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Find-of-rows-that-share-a-condition-in-a-by-group/m-p/187101#M47521</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2014-11-26T11:40:19Z</dc:date>
    </item>
    <item>
      <title>Re: Find # of rows that share a condition in a by-group</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Find-of-rows-that-share-a-condition-in-a-by-group/m-p/187102#M47522</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;PRE&gt;
Data A;
&amp;nbsp; Input ID Trns_QTR:YYQ. Val_A Val_B;
&amp;nbsp; format Trns_Qtr YYQs6.;
&amp;nbsp; Datalines;
100 2010Q1 1456 345
100 2010Q2 2500 0
100 2010Q3 2500 0
100 2010Q4 2500 0
200 2010Q4 0 1200
200 2011Q1 3100 0
200 2011Q2 3200 0
200 2011Q3 3100 0
200 2011Q4 3300 0
200 2012Q1 2500 12876
300 2009Q4 2390 0
300 2010Q1 4300 0
300 2010Q2 2300 678
300 2010Q3 5600 0
300 2010Q4 5600 0
300 2011Q1 2500 0 
300 2011Q2 3200 0
300 2011Q3 3100 0
300 2011Q4 3300 12876
300 2012Q1 3200 0
300 2012Q1 3100 0
300 2012Q2 3300 0
;
Run;
data one;
 set a;
 by id Val_B notsorted;
 length range $ 20;
 retain first;
 if first.Val_B then do;first=Trns_QTR;call missing(Trns_QTR);count=0; end;
 count+1;
 if last.Val_B and Val_B=0 then do;range=catx('-',put(first,yyq.),put(Trns_QTR,yyq.));output;end;
 keep id range count;
run;
data two;
 set one;
 by id;
 if last.id and scan(range,-1,'-')='2012Q2' then flag=1;
&amp;nbsp; else flag=0;
run;
proc sql;
 create table three as
&amp;nbsp; select count(distinct id) as n
&amp;nbsp;&amp;nbsp; from two
&amp;nbsp;&amp;nbsp;&amp;nbsp; where count gt 3 and&amp;nbsp; scan(range,-1,'-') eq '2012Q2';
quit;

&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Xia Keshan&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 26 Nov 2014 12:48:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Find-of-rows-that-share-a-condition-in-a-by-group/m-p/187102#M47522</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2014-11-26T12:48:01Z</dc:date>
    </item>
  </channel>
</rss>

