<?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 consecutive observations only in SAS Procedures</title>
    <link>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30437#M7231</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I will still be interested to see if anyone provides an easier solution, but I have found the look ahead look back method to be extremely handy and versitile for addressing such needs.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sat, 14 Jan 2012 23:10:43 GMT</pubDate>
    <dc:creator>art297</dc:creator>
    <dc:date>2012-01-14T23:10:43Z</dc:date>
    <item>
      <title>consecutive observations only</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30434#M7228</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi all,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I need help withe following procedure...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Suppose I have the following panel data:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;TABLE border="0" cellpadding="0" cellspacing="0" style="width: 233px;"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD class="xl65" height="20" width="64"&gt;Panelist&lt;/TD&gt;&lt;TD class="xl65" width="64"&gt;Year&lt;/TD&gt;&lt;TD class="xl65" width="105"&gt;Other Variables&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD align="right" height="20"&gt;1&lt;/TD&gt;&lt;TD align="right"&gt;2003&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD align="right" height="20"&gt;1&lt;/TD&gt;&lt;TD align="right"&gt;2004&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD align="right" height="20"&gt;1&lt;/TD&gt;&lt;TD align="right"&gt;2005&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD align="right" height="20"&gt;1&lt;/TD&gt;&lt;TD align="right"&gt;2006&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD align="right" height="20"&gt;1&lt;/TD&gt;&lt;TD align="right"&gt;2008&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD align="right" height="20"&gt;1&lt;/TD&gt;&lt;TD align="right"&gt;2009&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD align="right" height="20"&gt;2&lt;/TD&gt;&lt;TD align="right"&gt;2003&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD align="right" height="20"&gt;2&lt;/TD&gt;&lt;TD align="right"&gt;2004&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD align="right" height="20"&gt;2&lt;/TD&gt;&lt;TD align="right"&gt;2005&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD align="right" height="20"&gt;2&lt;/TD&gt;&lt;TD align="right"&gt;2007&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD align="right" height="20"&gt;2&lt;/TD&gt;&lt;TD align="right"&gt;2008&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD align="right" height="20"&gt;2&lt;/TD&gt;&lt;TD align="right"&gt;2009&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD align="right" height="20"&gt;3&lt;/TD&gt;&lt;TD align="right"&gt;2003&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD align="right" height="20"&gt;3&lt;/TD&gt;&lt;TD align="right"&gt;2004&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I want to remove the years that are not consecutive for at least three years such that:&lt;/P&gt;&lt;TABLE border="0" cellpadding="0" cellspacing="0" style="width: 192px;"&gt;&lt;TBODY&gt;&lt;TR style="height: 15.0pt;"&gt;&lt;TD class="xl65" height="20" style="height: 15.0pt; width: 48pt;" width="64"&gt;Panelist&lt;/TD&gt;&lt;TD class="xl65" style="width: 48pt;" width="64"&gt;Year&lt;/TD&gt;&lt;TD class="xl65" style="width: 48pt;" width="64"&gt;Other Variables&lt;/TD&gt;&lt;/TR&gt;&lt;TR style="height: 15.0pt;"&gt;&lt;TD align="right" height="20" style="height: 15.0pt;"&gt;1&lt;/TD&gt;&lt;TD align="right"&gt;2003&lt;/TD&gt;&lt;TD&gt;&lt;BR /&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR style="height: 15.0pt;"&gt;&lt;TD align="right" height="20" style="height: 15.0pt;"&gt;1&lt;/TD&gt;&lt;TD align="right"&gt;2004&lt;/TD&gt;&lt;TD&gt;&lt;BR /&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR style="height: 15.0pt;"&gt;&lt;TD align="right" height="20" style="height: 15.0pt;"&gt;1&lt;/TD&gt;&lt;TD align="right"&gt;2005&lt;/TD&gt;&lt;TD&gt;&lt;BR /&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR style="height: 15.0pt;"&gt;&lt;TD align="right" height="20" style="height: 15.0pt;"&gt;1&lt;/TD&gt;&lt;TD align="right"&gt;2006&lt;/TD&gt;&lt;TD&gt;&lt;BR /&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR style="height: 15.0pt;"&gt;&lt;TD align="right" height="20" style="height: 15.0pt;"&gt;2&lt;/TD&gt;&lt;TD align="right"&gt;2003&lt;/TD&gt;&lt;TD&gt;&lt;BR /&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR style="height: 15.0pt;"&gt;&lt;TD align="right" height="20" style="height: 15.0pt;"&gt;2&lt;/TD&gt;&lt;TD align="right"&gt;2004&lt;/TD&gt;&lt;TD&gt;&lt;BR /&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR style="height: 15.0pt;"&gt;&lt;TD align="right" height="20" style="height: 15.0pt;"&gt;2&lt;/TD&gt;&lt;TD align="right"&gt;2005&lt;/TD&gt;&lt;TD&gt;&lt;BR /&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR style="height: 15.0pt;"&gt;&lt;TD align="right" height="20" style="height: 15.0pt;"&gt;2&lt;/TD&gt;&lt;TD align="right"&gt;2007&lt;/TD&gt;&lt;TD&gt;&lt;BR /&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR style="height: 15.0pt;"&gt;&lt;TD align="right" height="20" style="height: 15.0pt;"&gt;2&lt;/TD&gt;&lt;TD align="right"&gt;2008&lt;/TD&gt;&lt;TD&gt;&lt;BR /&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR style="height: 15.0pt;"&gt;&lt;TD align="right" height="20" style="height: 15.0pt;"&gt;2&lt;/TD&gt;&lt;TD align="right"&gt;2009&lt;/TD&gt;&lt;TD&gt;&lt;BR /&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Note that panelist 3 was entirely removed since it only has 2 (&amp;lt;3) consecutive years.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;What is an efficient way to do this? I'm a SAS novice and any comments would be greatly appreciated.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;Chris&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 14 Jan 2012 21:23:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30434#M7228</guid>
      <dc:creator>jkf91</dc:creator>
      <dc:date>2012-01-14T21:23:48Z</dc:date>
    </item>
    <item>
      <title>Re: consecutive observations only</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30435#M7229</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;There is probably an easier way to do what you want, but the following does accomplish the task.&amp;nbsp; It is based on the look ahead look back method that is described at: &lt;A href="http://www.sascommunity.org/wiki/Look-Ahead_and_Look-Back"&gt;http://www.sascommunity.org/wiki/Look-Ahead_and_Look-Back&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data have;&lt;/P&gt;&lt;P&gt;&amp;nbsp; input Panelist Year othervars;&lt;/P&gt;&lt;P&gt;&amp;nbsp; cards;&lt;/P&gt;&lt;P&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2003 1&lt;/P&gt;&lt;P&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2004 1&lt;/P&gt;&lt;P&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2005 1&lt;/P&gt;&lt;P&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2006 1&lt;/P&gt;&lt;P&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2008 1&lt;/P&gt;&lt;P&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2009 1&lt;/P&gt;&lt;P&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2003 1&lt;/P&gt;&lt;P&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2004 1&lt;/P&gt;&lt;P&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2005 1&lt;/P&gt;&lt;P&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2007 1&lt;/P&gt;&lt;P&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2008 1&lt;/P&gt;&lt;P&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2009 1&lt;/P&gt;&lt;P&gt;3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2003 1&lt;/P&gt;&lt;P&gt;3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2004 1&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sort data=have;&lt;/P&gt;&lt;P&gt;&amp;nbsp; by panelist year;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want (drop=_:);&lt;/P&gt;&lt;P&gt;&amp;nbsp; set have;&lt;/P&gt;&lt;P&gt;&amp;nbsp; by Panelist;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set have ( firstobs = 2 keep = year rename = (year = _year2) )&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; have (&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; obs = 1 drop = _all_&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;/P&gt;&lt;P&gt;&amp;nbsp; _year2 = ifn(&amp;nbsp; last.Panelist, (.), _year2 );&lt;/P&gt;&lt;P&gt;&amp;nbsp; set have ( firstobs = 3 keep = year rename = (year = _year3) )&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; have (&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; obs = 2 drop = _all_&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;/P&gt;&lt;P&gt;&amp;nbsp; _year3 = ifn(&amp;nbsp; last.Panelist, (.), _year3 );&lt;/P&gt;&lt;P&gt;&amp;nbsp; _prev1 = ifn( first.Panelist, (.), lag(year) );&lt;/P&gt;&lt;P&gt;&amp;nbsp; _prev2 = ifn( first.Panelist, (.), lag2(year) );&lt;/P&gt;&lt;P&gt;&amp;nbsp; if (year-2 eq _prev1-1 eq _prev2) or&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (year+2 eq _year2+1 eq _year3) or&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (year eq _year2-1 eq _prev1+1) then output;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 14 Jan 2012 22:16:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30435#M7229</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2012-01-14T22:16:11Z</dc:date>
    </item>
    <item>
      <title>consecutive observations only</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30436#M7230</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you! It worked! &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;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 14 Jan 2012 22:55:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30436#M7230</guid>
      <dc:creator>jkf91</dc:creator>
      <dc:date>2012-01-14T22:55:25Z</dc:date>
    </item>
    <item>
      <title>consecutive observations only</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30437#M7231</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I will still be interested to see if anyone provides an easier solution, but I have found the look ahead look back method to be extremely handy and versitile for addressing such needs.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 14 Jan 2012 23:10:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30437#M7231</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2012-01-14T23:10:43Z</dc:date>
    </item>
    <item>
      <title>Re: consecutive observations only</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30438#M7232</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Art -&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; I think that it is not working at the end of the file.&amp;nbsp; Sort by descending Panelist.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; Here is a similar method with more checking for end of file condition.&amp;nbsp; But it does require that SAS is able to count incoming observations such when using a dataset as input instead of a view.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="jive_text_macro jive_macro_code"&gt;&lt;P&gt;data have;&lt;/P&gt;&lt;P&gt;&amp;nbsp; input Panelist Year Othervars @@ ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; cards;&lt;/P&gt;&lt;P&gt;1 2003 1 1 2004 1 1 2005 1 1 2006 1 1 2008 1 1 2009 1&lt;/P&gt;&lt;P&gt;2 2003 1 2 2004 1 2 2005 1 2 2007 1 2 2008 1 2 2009 1&lt;/P&gt;&lt;P&gt;3 2003 1 3 2004 1&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set have nobs=nobs ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if (_n_ &amp;lt; nobs) then set&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; have (firstobs=2 keep=panelist year rename=(panelist=_np year=_ny))&lt;/P&gt;&lt;P&gt;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; if (_n_ &amp;lt; nobs - 1) then set&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; have (firstobs=3 keep=panelist year rename=(panelist=_np2 year=_ny2))&lt;/P&gt;&lt;P&gt;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; _pp = lag(panelist);&lt;/P&gt;&lt;P&gt;&amp;nbsp; _py = lag(year);&lt;/P&gt;&lt;P&gt;&amp;nbsp; _pp2= lag2(panelist);&lt;/P&gt;&lt;P&gt;&amp;nbsp; _py2= lag2(year);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; keep =&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; (_pp2 = _pp = panelist) and (sum(_py2,2) = sum(_py,1)=&amp;nbsp; year)&lt;/P&gt;&lt;P&gt;&amp;nbsp; or (_pp = panelist = _np) and (sum(_py,1)=&amp;nbsp; year = sum(_ny,-1) )&lt;/P&gt;&lt;P&gt;&amp;nbsp; or (panelist = _np = _np2) and ( year = sum(_ny,-1) = sum(_ny2,-2) )&lt;/P&gt;&lt;P&gt;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc print;&lt;/P&gt;&lt;P&gt; by panelist ;&lt;/P&gt;&lt;P&gt; id panelist;&lt;/P&gt;&lt;P&gt; var keep year othervars;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE __default_attr="plain" __jive_macro_name="code" class="jive_text_macro jive_macro_code"&gt;&lt;P&gt;Panelist&amp;nbsp;&amp;nbsp;&amp;nbsp; keep&amp;nbsp;&amp;nbsp;&amp;nbsp; Year&amp;nbsp;&amp;nbsp;&amp;nbsp; Othervars&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2003&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&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; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2004&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&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; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2005&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&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; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2006&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&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; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2008&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&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; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2009&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2003&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&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; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2004&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&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; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2005&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&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; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2007&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&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; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2008&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&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; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2009&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&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; 2003&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&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; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2004&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;/P&gt;&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 14 Jan 2012 23:15:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30438#M7232</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2012-01-14T23:15:48Z</dc:date>
    </item>
    <item>
      <title>Re: consecutive observations only</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30439#M7233</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Tom,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The method I proposed did work, I think.&amp;nbsp; Your code doesn't account for the specified criteria, namely the a record should ONLY be output if it is part of an adjacent three year sequence.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Art&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 14 Jan 2012 23:20:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30439#M7233</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2012-01-14T23:20:27Z</dc:date>
    </item>
    <item>
      <title>Re: consecutive observations only</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30440#M7234</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;If I run it just on panelist 2 I only get 5 records. The last is lost.&lt;/P&gt;&lt;P&gt;I did not see the extra version of have getting pulled in with no variables.&lt;/P&gt;&lt;P&gt;On the second one you need change OBS=1 to OBS=2.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 14 Jan 2012 23:30:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30440#M7234</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2012-01-14T23:30:23Z</dc:date>
    </item>
    <item>
      <title>Re: consecutive observations only</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30441#M7235</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Art,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="color: black; background-color: white; font-family: 'Courier New'; font-size: 14pt;"&gt;I think "obs=1" shoud be "obs=2" in your code.&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="color: black; background-color: white; font-family: 'Courier New'; font-size: 14pt;"&gt; &lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="color: blue; background-color: white; font-family: 'Courier New'; font-size: 12pt;"&gt;set&lt;/SPAN&gt;&lt;SPAN style="color: black; background-color: white; font-family: 'Courier New'; font-size: 12pt;"&gt;have ( firstobs = &lt;/SPAN&gt;&lt;STRONG style="color: teal; font-size: 12pt; background-color: white; font-family: 'Courier New';"&gt;3&lt;/STRONG&gt;&lt;SPAN style="color: black; background-color: white; font-family: 'Courier New'; font-size: 12pt;"&gt; keep = year rename =(year = _year3) )&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="color: black; background-color: white; font-family: 'Courier New'; font-size: 12pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; have (&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="color: red; background-color: white; font-family: 'Courier New'; font-size: 12pt;"&gt;obs = &lt;STRONG&gt;1&lt;/STRONG&gt; &lt;/SPAN&gt;&lt;SPAN style="color: black; background-color: white; font-family: 'Courier New'; font-size: 12pt;"&gt;drop= _all_&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="color: black; background-color: white; font-family: 'Courier New'; font-size: 12pt;"&gt;you will see the difference if you add another obsevation&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="color: black; background-color: white; font-family: 'Courier New'; font-size: 12pt;"&gt;"Panelist=3 Year=2005" to the dataset.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="margin-bottom: 0.0001pt;"&gt;&lt;SPAN style="color: black; background-color: white; font-family: 'Courier New'; font-size: 12pt;"&gt;Thank you!&lt;BR /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000080; font-size: 19px; font-family: 'Courier New';"&gt;&lt;STRONG&gt;&lt;BR /&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 14 Jan 2012 23:41:00 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30441#M7235</guid>
      <dc:creator>Linlin</dc:creator>
      <dc:date>2012-01-14T23:41:00Z</dc:date>
    </item>
    <item>
      <title>Re: consecutive observations only</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30442#M7236</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Tom,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You were absolutely correct!&amp;nbsp; I changed the code (i.e., making obs=2) in my original post and, hopefully, the OP has followed our latest exchange.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Art&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 14 Jan 2012 23:41:36 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30442#M7236</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2012-01-14T23:41:36Z</dc:date>
    </item>
    <item>
      <title>Re: consecutive observations only</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30443#M7237</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Linlin, I think (hope) I made the correct change at the EXACT moment that you posted your response.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 14 Jan 2012 23:42:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30443#M7237</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2012-01-14T23:42:48Z</dc:date>
    </item>
    <item>
      <title>Re: consecutive observations only</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30444#M7238</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;thank you all. i got it revised. &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;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 14 Jan 2012 23:48:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30444#M7238</guid>
      <dc:creator>jkf91</dc:creator>
      <dc:date>2012-01-14T23:48:27Z</dc:date>
    </item>
    <item>
      <title>Re: consecutive observations only</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30445#M7239</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;This would make an excellent SGF presentation .. too bad it is too late to submit for 2012.&amp;nbsp; Anyone planning on going to San Francisco in 2013?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 15 Jan 2012 00:22:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30445#M7239</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2012-01-15T00:22:13Z</dc:date>
    </item>
    <item>
      <title>Re: consecutive observations only</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30446#M7240</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I can't really think of an easier solution than some kind of a "look-ahead". One could of course transpose stuff and then use array processing.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The one thing I would try to change is the need for a pass through the data and additional logic for every single consecutive year (eg: what if the OP would have asked for 6 consecutive years?).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Below a code variation which should work for any number of consecutive years:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc delete data=work.want;run;&lt;/P&gt;&lt;P&gt;data have;&lt;BR /&gt;&amp;nbsp; input Panelist Year othervars;&lt;BR /&gt;cards;&lt;BR /&gt;1 2003 1&lt;BR /&gt;1 2004 1&lt;BR /&gt;1 2005 1&lt;BR /&gt;1 2006 1&lt;BR /&gt;1 2008 1&lt;BR /&gt;1 2009 1&lt;BR /&gt;2 2003 1&lt;BR /&gt;2 2004 1&lt;BR /&gt;2 2005 1&lt;BR /&gt;2 2007 1&lt;BR /&gt;2 2008 1&lt;BR /&gt;2 2009 1&lt;BR /&gt;3 2003 1&lt;BR /&gt;3 2004 1&lt;BR /&gt;4 2004 1&lt;BR /&gt;;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sql; &lt;BR /&gt;&amp;nbsp; create table DistObs as&lt;BR /&gt;&amp;nbsp; select distinct panelist,year&lt;BR /&gt;&amp;nbsp; from have&lt;BR /&gt;&amp;nbsp; order by panelist,year&lt;BR /&gt;&amp;nbsp; ;&lt;BR /&gt;quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%let MinConsecutiveYears=3;&lt;BR /&gt;data YearSelection (keep=Panelist Year);&lt;/P&gt;&lt;P&gt;&amp;nbsp; do while(1=1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _pointerStart=sum(_pointerStart,1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _pointerEnd&amp;nbsp; =sum(_pointerStart,&amp;amp;MinConsecutiveYears,-1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if _pointerEnd&amp;gt;_nobs then stop;&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set DistObs (keep=Panelist Year rename=(Panelist=_PanelistStart Year=_YearStart)) point=_pointerStart nobs=_nobs;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set DistObs (keep=Panelist Year rename=(Panelist=_PanelistStop Year=_YearStop)) point=_pointerEnd;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if _PanelistStart=_PanelistStop and sum(_YearStart,&amp;amp;MinConsecutiveYears,-1)=_YearStop then&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _LagPanelist=_PanelistStart;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _LagYear=_YearStart-1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do _pointerStart=_pointerStart to _nobs;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set DistObs point=_pointerStart;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if _LagPanelist ne Panelist or _LagYear ne Year-1 then leave;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _LagPanelist=Panelist;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _LagYear&amp;nbsp;&amp;nbsp;&amp;nbsp; =Year;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _pointerStart=sum(_pointerStart,-1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sql;&lt;BR /&gt;/*&amp;nbsp; create table want as*/&lt;BR /&gt;&amp;nbsp; select l.*&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; from have l, YearSelection r&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; where l.panelist=r.panelist and l.year=r.year&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; order by l.panelist, l.year&lt;BR /&gt;&amp;nbsp; ;&lt;BR /&gt;quit;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 15 Jan 2012 01:15:04 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30446#M7240</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2012-01-15T01:15:04Z</dc:date>
    </item>
    <item>
      <title>Re: consecutive observations only</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30447#M7241</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Use a Double DoW after pre-processing to create an appropriate BY variable.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Courier New;"&gt;&lt;SPAN style="color: #000080;"&gt;&lt;STRONG&gt;data&lt;/STRONG&gt;&lt;/SPAN&gt; grouped ;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Courier New;"&gt;&lt;SPAN style="color: #0000ff;"&gt;set&lt;/SPAN&gt; have ;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Courier New;"&gt;&lt;SPAN style="color: #0000ff;"&gt;by&lt;/SPAN&gt; panelist ;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Courier New;"&gt;groupnum + ( first.panelist OR ( dif(year) GT &lt;SPAN style="color: #008080;"&gt;&lt;STRONG&gt;1&lt;/STRONG&gt;&lt;/SPAN&gt; ) ) ;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Courier New; color: #000080;"&gt;&lt;STRONG&gt;run&lt;/STRONG&gt;&lt;SPAN style="color: #000000;"&gt; ;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Courier New;"&gt;&lt;SPAN style="color: #000080;"&gt;&lt;STRONG&gt;data&lt;/STRONG&gt;&lt;/SPAN&gt; want ;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Courier New;"&gt;&lt;SPAN style="color: #0000ff;"&gt;do&lt;/SPAN&gt; many = &lt;SPAN style="color: #008080;"&gt;&lt;STRONG&gt;1&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: #0000ff;"&gt;by&lt;/SPAN&gt; &lt;SPAN style="color: #008080;"&gt;&lt;STRONG&gt;1&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: #0000ff;"&gt;until&lt;/SPAN&gt; (last.groupnum) ;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Courier New;"&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #0000ff;"&gt;set&lt;/SPAN&gt; grouped ;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Courier New;"&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #0000ff;"&gt;by&lt;/SPAN&gt; groupnum ;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Courier New;"&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #0000ff;"&gt;end&lt;/SPAN&gt; ;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Courier New;"&gt;&lt;SPAN style="color: #0000ff;"&gt;do&lt;/SPAN&gt; nn = &lt;SPAN style="color: #008080;"&gt;&lt;STRONG&gt;1&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: #0000ff;"&gt;to&lt;/SPAN&gt; many ;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Courier New;"&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #0000ff;"&gt;set&lt;/SPAN&gt; grouped ;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Courier New;"&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #0000ff;"&gt;if&lt;/SPAN&gt; many GE &lt;SPAN style="color: #008080;"&gt;&lt;STRONG&gt;3&lt;/STRONG&gt;&lt;/SPAN&gt; &lt;SPAN style="color: #0000ff;"&gt;then&lt;/SPAN&gt; &lt;SPAN style="color: #0000ff;"&gt;output&lt;/SPAN&gt; ;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Courier New;"&gt;&amp;nbsp;&amp;nbsp; &lt;SPAN style="color: #0000ff;"&gt;end&lt;/SPAN&gt; ;&lt;/P&gt;&lt;P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 10.0px Courier New; color: #000080;"&gt;&lt;STRONG&gt;run&lt;/STRONG&gt;&lt;SPAN style="color: #000000;"&gt; ;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 15 Jan 2012 16:16:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30447#M7241</guid>
      <dc:creator>Howles</dc:creator>
      <dc:date>2012-01-15T16:16:11Z</dc:date>
    </item>
    <item>
      <title>Re: consecutive observations only</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30448#M7242</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Howard,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Nice solution!&amp;nbsp; I especially liked the preprocessing part.&amp;nbsp; Of course, following that, a fairly simple proc sql segment also would have sufficed. I.e.:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data grouped ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set have ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; by panelist ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; groupnum + ( first.panelist OR ( dif(year) GT 1 ) ) ;&lt;/P&gt;&lt;P&gt;run ;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;&amp;nbsp; create table want (drop=groupnum) as&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select *&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from grouped&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; group by groupnum&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; having count(*) &amp;gt; 2&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; order by panelist,year&lt;/P&gt;&lt;P&gt;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 15 Jan 2012 16:34:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30448#M7242</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2012-01-15T16:34:13Z</dc:date>
    </item>
    <item>
      <title>Re: consecutive observations only</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30449#M7243</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;hi ... as Art said "nice"&amp;nbsp; ... it reminded me of another one of your ideas, the self-interleave (once GROUPNUM is added to the data set) ...&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;data want (drop=groupnum);&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;do _n_ = 0 by 0 until (last.groupnum) ;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;&amp;nbsp; set grouped (in=one) grouped;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;&amp;nbsp; by groupnum;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;&amp;nbsp; _n_ + one;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;&amp;nbsp; if ^one and _n_ ge 3 then output;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;end;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="font-family: 'courier new', courier;"&gt;run;&lt;/STRONG&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 15 Jan 2012 20:02:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30449#M7243</guid>
      <dc:creator>MikeZdeb</dc:creator>
      <dc:date>2012-01-15T20:02:07Z</dc:date>
    </item>
    <item>
      <title>Re: consecutive observations only</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30450#M7244</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;If I understood what you mean.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE&gt;data have;
&amp;nbsp; input Panelist Year Othervars @@ ;
&amp;nbsp; cards;
1 2003 1 1 2004 1 1 2005 1 1 2006 1 1 2008 1 1 2009 1
2 2003 1 2 2004 1 2 2005 1 2 2007 1 2 2008 1 2 2009 1
3 2003 1 3 2004 1
;
run;
data have;
 set have;
 if dif(year) ne 1 or panelist ne lag(panelist) then group+1;
run;
proc sql ;
create table want as
 select * 
&amp;nbsp; from have
&amp;nbsp;&amp;nbsp; group by group
&amp;nbsp;&amp;nbsp;&amp;nbsp; having count(*) ge 3
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; order by panelist,year;
quit;

&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Ksharp&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 16 Jan 2012 03:46:57 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30450#M7244</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2012-01-16T03:46:57Z</dc:date>
    </item>
    <item>
      <title>Re: consecutive observations only</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30451#M7245</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;KSharp, two minor but additional simplifications that will reduce processing time:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data grouped;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set have;&lt;/P&gt;&lt;P&gt;&amp;nbsp; groupnum+(dif(year) ne 1 or dif(panelist) ne 0);&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sql ;&lt;/P&gt;&lt;P&gt;&amp;nbsp; create table want (drop=groupnum) as&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; select * &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from grouped&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; group by groupnum&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; having count(*) &amp;gt; 2&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; order by panelist,year&lt;/P&gt;&lt;P&gt;&amp;nbsp; ;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 16 Jan 2012 04:27:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30451#M7245</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2012-01-16T04:27:35Z</dc:date>
    </item>
    <item>
      <title>Re: consecutive observations only</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30452#M7246</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Art.&lt;/P&gt;&lt;P&gt;Actually. Yours and mine are the same .&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Ksharp&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 16 Jan 2012 06:03:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30452#M7246</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2012-01-16T06:03:43Z</dc:date>
    </item>
    <item>
      <title>Re: consecutive observations only</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30453#M7247</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;KSharp, Actually they aren't.&amp;nbsp; Your post got me to question whether your approach would run any faster than the one that Howard had suggesed.&amp;nbsp; To my surprise, it didn't.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I changed your line: &lt;/P&gt;&lt;PRE style="background-color: #ffffff; font-size: 1.2em; overflow-x: auto; overflow-y: auto;"&gt; if dif(year) ne 1 or panelist ne lag(panelist) then group+1;&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;to:&amp;nbsp; &lt;SPAN style="background-color: #ffffff;"&gt;&amp;nbsp; groupnum+(dif(year) ne 1 or dif(panelist) ne 0);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;plus, I changed your line: having count(*) ge 3&lt;/P&gt;&lt;P&gt;to: &lt;SPAN style="background-color: #ffffff;"&gt;having count(*) &amp;gt; 2&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="background-color: #ffffff;"&gt;The combination of those two changes resulted in a 16% reduction in average needed cpu time.&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 16 Jan 2012 13:48:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/consecutive-observations-only/m-p/30453#M7247</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2012-01-16T13:48:24Z</dc:date>
    </item>
  </channel>
</rss>

