<?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: Locate and tag current, next and previous observations by variable in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Locate-and-tag-current-next-and-previous-observations-by/m-p/203271#M37875</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;PRE&gt;data have;
input OBS ID $ FLAG $;
cards;
1 RED .&amp;nbsp;&amp;nbsp; 
2 RED&amp;nbsp; .
3 RED Y 
4 RED&amp;nbsp; .
5 RED&amp;nbsp;&amp;nbsp; .
6 BLUE Y 
7 BLUE&amp;nbsp; .
8 GREEN .
9 GREEN Y 
10 PURPLE&amp;nbsp;&amp;nbsp; .
11 PURPLE&amp;nbsp;&amp;nbsp; .
12 PURPLE&amp;nbsp; .
13 PURPLE Y .
14 PURPLE&amp;nbsp; .
15 PURPLE&amp;nbsp; .
;
run;
data want;
 merge have have(firstobs=2 keep=id flag rename=(id=_id flag=_flag)); 
 length POSTION $ 20;
 lag_flag=lag(flag);lag_id=lag(id);
 if FLAG='Y' then POSTION='CURRENT';
&amp;nbsp; else if missing(FLAG) and _FLAG='Y' and id=_id then POSTION='PREVIOUS';
&amp;nbsp;&amp;nbsp; else if missing(FLAG) and lag_flag='Y' and id=lag_id then POSTION='NEXT';
drop lag_: _:;
run;

&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Xia Keshan&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 21 Aug 2015 01:28:12 GMT</pubDate>
    <dc:creator>Ksharp</dc:creator>
    <dc:date>2015-08-21T01:28:12Z</dc:date>
    <item>
      <title>Locate and tag current, next and previous observations by variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Locate-and-tag-current-next-and-previous-observations-by/m-p/203265#M37869</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I would like to find an easier solution to a problem I am having. I can manage this task, however it's though several steps outside SAS (SQL LIMIT). At best I don't get all the observations correctly in SAS alone.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have used a POINT and SET however I can't get the BY variables working. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Would be good to have a data step or PROC SQL to be able to achieve this in SAS alone.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The code I have modified is below. Currently, it does not discriminate between the ID, it just follows the order of the set.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data WANT;&lt;BR /&gt;set HAVE&amp;nbsp; nobs=nobs;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;if FLAG = 'Y' then do;&lt;BR /&gt;&amp;nbsp; current = _N_;&lt;BR /&gt;&amp;nbsp; prev = current - 1;&lt;BR /&gt;&amp;nbsp; next = current + 1;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;if prev &amp;gt; 0 then do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set HAVE point = prev;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; POSTION = 'PREVIOUS';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;set HAVE point = current;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; POSTION = 'CURRENT';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;if next &amp;lt;= nobs then do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; set HAVE point = next;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; POSTION = 'NEXT';&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;BR /&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;end;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &lt;/P&gt;&lt;P&gt;I have a table with multiple ID's. Within each ID there is an observation with a flag.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;TABLE border="1" class="jiveBorder" jive-data-cell="{&amp;quot;color&amp;quot;:&amp;quot;#575757&amp;quot;,&amp;quot;textAlign&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;padding&amp;quot;:&amp;quot;2&amp;quot;,&amp;quot;backgroundColor&amp;quot;:&amp;quot;transparent&amp;quot;,&amp;quot;fontFamily&amp;quot;:&amp;quot;arial,helvetica,sans-serif&amp;quot;}" jive-data-header="{&amp;quot;color&amp;quot;:&amp;quot;#FFFFFF&amp;quot;,&amp;quot;backgroundColor&amp;quot;:&amp;quot;#6690BC&amp;quot;,&amp;quot;textAlign&amp;quot;:&amp;quot;center&amp;quot;,&amp;quot;padding&amp;quot;:&amp;quot;2&amp;quot;,&amp;quot;fontFamily&amp;quot;:&amp;quot;arial,helvetica,sans-serif&amp;quot;}" style="border: 1px solid #000000;"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TH style="padding: 2px; text-align: center; color: #ffffff; font-family: arial,helvetica,sans-serif; background-color: #6690bc;"&gt;&lt;STRONG&gt;OBS&lt;/STRONG&gt;&lt;/TH&gt;&lt;TH style="padding: 2px; text-align: center; color: #ffffff; font-family: arial,helvetica,sans-serif; background-color: #6690bc;"&gt;&lt;STRONG&gt;ID&lt;/STRONG&gt;&lt;/TH&gt;&lt;TH style="padding: 2px; text-align: center; color: #ffffff; font-family: arial,helvetica,sans-serif; background-color: #6690bc;"&gt;&lt;STRONG&gt;FLAG&lt;/STRONG&gt;&lt;/TH&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;1&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;RED&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;2&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;RED&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;3&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;RED&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;Y&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;4&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;RED&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;5&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;RED&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;6&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;BLUE&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;Y&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;7&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;BLUE&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;8&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;GREEN&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;9&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;GREEN&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;Y&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;10&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;PURPLE&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;11&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;PURPLE&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;12&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;PURPLE&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;13&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;PURPLE&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;Y&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;14&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;PURPLE&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;15&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;PURPLE&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I would like to locate and tag the current, previous and next observation based on OBS order (or dates) and the ID as sorted above. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The output would look like below.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;TABLE border="1" class="jiveBorder" jive-data-cell="{&amp;quot;color&amp;quot;:&amp;quot;#575757&amp;quot;,&amp;quot;textAlign&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;padding&amp;quot;:&amp;quot;2&amp;quot;,&amp;quot;backgroundColor&amp;quot;:&amp;quot;transparent&amp;quot;,&amp;quot;fontFamily&amp;quot;:&amp;quot;arial,helvetica,sans-serif&amp;quot;}" jive-data-header="{&amp;quot;color&amp;quot;:&amp;quot;#FFFFFF&amp;quot;,&amp;quot;backgroundColor&amp;quot;:&amp;quot;#6690BC&amp;quot;,&amp;quot;textAlign&amp;quot;:&amp;quot;center&amp;quot;,&amp;quot;padding&amp;quot;:&amp;quot;2&amp;quot;,&amp;quot;fontFamily&amp;quot;:&amp;quot;arial,helvetica,sans-serif&amp;quot;}" style="border: 1px solid #000000;"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TH style="padding: 2px; text-align: center; color: #ffffff; font-family: arial,helvetica,sans-serif; background-color: #6690bc;"&gt;&lt;STRONG&gt;OBS&lt;/STRONG&gt;&lt;/TH&gt;&lt;TH style="padding: 2px; text-align: center; color: #ffffff; font-family: arial,helvetica,sans-serif; background-color: #6690bc;"&gt;&lt;STRONG&gt;ID&lt;/STRONG&gt;&lt;/TH&gt;&lt;TH style="padding: 2px; text-align: center; color: #ffffff; font-family: arial,helvetica,sans-serif; background-color: #6690bc;"&gt;&lt;STRONG&gt;FLAG&lt;/STRONG&gt;&lt;/TH&gt;&lt;TH style="padding: 2px; text-align: center; color: #ffffff; font-family: arial,helvetica,sans-serif; background-color: #6690bc;"&gt;&lt;STRONG&gt;POSTION&lt;/STRONG&gt;&lt;/TH&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;1&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;RED&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;2&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;RED&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;PREVIOUS&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;3&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;RED&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;Y&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;CURRENT&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;4&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;RED&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;NEXT&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;5&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;RED&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;6&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;BLUE&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;Y&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;CURRENT&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;7&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;BLUE&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;NEXT&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;8&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;GREEN&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;PREVIOUS&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;9&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;GREEN&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;Y&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;CURRENT&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;10&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;PURPLE&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;11&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;PURPLE&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;12&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;PURPLE&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;PREVIOUS&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;13&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;PURPLE&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;Y&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;CURRENT&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;14&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;PURPLE&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;NEXT&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;15&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;PURPLE&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;&lt;/TD&gt;&lt;TD style="padding: 2px; text-align: left; color: #575757; font-family: arial,helvetica,sans-serif;"&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt; Any help would be greatly appreciated.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 20 Aug 2015 05:59:47 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Locate-and-tag-current-next-and-previous-observations-by/m-p/203265#M37869</guid>
      <dc:creator>Tucky</dc:creator>
      <dc:date>2015-08-20T05:59:47Z</dc:date>
    </item>
    <item>
      <title>Re: Locate and tag current, next and previous observations by variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Locate-and-tag-current-next-and-previous-observations-by/m-p/203266#M37870</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;/* dertermine the succeeding records, using lag() function and original order */&lt;/P&gt;&lt;P&gt;data int1 (drop=oldflg oldid);&lt;/P&gt;&lt;P&gt;set have;&lt;/P&gt;&lt;P&gt;length POSTION $ 8;&lt;/P&gt;&lt;P&gt;count = _N_;&lt;/P&gt;&lt;P&gt;oldflg = lag(flag);&lt;/P&gt;&lt;P&gt;oldid = lag(id);&lt;/P&gt;&lt;P&gt;if oldflg = 'Y' and oldid = id then POSTION = 'NEXT';&lt;/P&gt;&lt;P&gt;if flag = 'Y' then POSTION = 'CURRENT';&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;/* turn the dataset upside down */&lt;/P&gt;&lt;P&gt;proc sort data=int1;&lt;/P&gt;&lt;P&gt;by descending count;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;/* dertermine the preceding records, using the reverse order */&lt;/P&gt;&lt;P&gt;data int2 (drop=oldflg oldid);&lt;/P&gt;&lt;P&gt;set int1;&lt;/P&gt;&lt;P&gt;oldflg = lag(flag);&lt;/P&gt;&lt;P&gt;oldid = lag(id);&lt;/P&gt;&lt;P&gt;if oldflg = 'Y' and oldid = id then POSTION = 'PREVIOUS';&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;/* establish original order */&lt;/P&gt;&lt;P&gt;proc sort data=int2 out=want (drop=count);&lt;/P&gt;&lt;P&gt;by count;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 20 Aug 2015 07:46:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Locate-and-tag-current-next-and-previous-observations-by/m-p/203266#M37870</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2015-08-20T07:46:29Z</dc:date>
    </item>
    <item>
      <title>Re: Locate and tag current, next and previous observations by variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Locate-and-tag-current-next-and-previous-observations-by/m-p/203267#M37871</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;As an alternative, an SQL based approach:&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;&amp;nbsp; create table WANT as&lt;/P&gt;&lt;P&gt;&amp;nbsp; select&amp;nbsp; A.*,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; case when A.OBS=B.OBS-1 then "Previous"&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;&amp;nbsp; when A.OBS=B.OBS then "Current"&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;&amp;nbsp; when A.OBS=B.OBS+1 then "Next"&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;&amp;nbsp; else "" end as POSITION&lt;/P&gt;&lt;P&gt;&amp;nbsp; from&amp;nbsp;&amp;nbsp;&amp;nbsp; WORK.HAVE A&lt;/P&gt;&lt;P&gt;&amp;nbsp; left join (select * from WORK.HAVE where FLAG="Y") B&lt;/P&gt;&lt;P&gt;&amp;nbsp; on&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A.ID=B.ID&lt;/P&gt;&lt;P&gt;&amp;nbsp; order by A.OBS;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 20 Aug 2015 10:18:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Locate-and-tag-current-next-and-previous-observations-by/m-p/203267#M37871</guid>
      <dc:creator>RW9</dc:creator>
      <dc:date>2015-08-20T10:18:43Z</dc:date>
    </item>
    <item>
      <title>Re: Locate and tag current, next and previous observations by variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Locate-and-tag-current-next-and-previous-observations-by/m-p/203268#M37872</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you Kurt and RW9, both awesome answers.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Nice work.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 20 Aug 2015 23:06:47 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Locate-and-tag-current-next-and-previous-observations-by/m-p/203268#M37872</guid>
      <dc:creator>Tucky</dc:creator>
      <dc:date>2015-08-20T23:06:47Z</dc:date>
    </item>
    <item>
      <title>Re: Locate and tag current, next and previous observations by variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Locate-and-tag-current-next-and-previous-observations-by/m-p/203269#M37873</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;You can do it just using FIRST. and LAST. flags.&amp;nbsp; At least for your sample data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&lt;STRONG style="color: navy; background: white; font-size: 10.0pt; font-family: 'Courier New';"&gt;data&lt;/STRONG&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: black; background: white;"&gt; want ; &lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&amp;nbsp; &lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: blue; background: white;"&gt;set&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: black; background: white;"&gt; have; &lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&amp;nbsp; &lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: blue; background: white;"&gt;by&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: black; background: white;"&gt; color flag &lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: blue; background: white;"&gt;notsorted&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: black; background: white;"&gt; ;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&amp;nbsp; &lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: blue; background: white;"&gt;if&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: black; background: white;"&gt; last.flag and flag=&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: purple; background: white;"&gt;' '&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: black; background: white;"&gt; and not last.color &lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: blue; background: white;"&gt;then&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: black; background: white;"&gt; position=&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: purple; background: white;"&gt;'PREVIOUS'&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: black; background: white;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&amp;nbsp; &lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: blue; background: white;"&gt;else&lt;/SPAN&gt; &lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: blue; background: white;"&gt;if&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: black; background: white;"&gt; flag=&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: purple; background: white;"&gt;'Y'&lt;/SPAN&gt; &lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: blue; background: white;"&gt;then&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: black; background: white;"&gt; position=&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: purple; background: white;"&gt;'CURRENT'&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: black; background: white;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P style="margin-bottom: .0001pt;"&gt;&amp;nbsp; &lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: blue; background: white;"&gt;else&lt;/SPAN&gt; &lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: blue; background: white;"&gt;if&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: black; background: white;"&gt; first.flag and flag=&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: purple; background: white;"&gt;' '&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: black; background: white;"&gt; and not first.color &lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: blue; background: white;"&gt;then&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: black; background: white;"&gt; position=&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: purple; background: white;"&gt;'NEXT'&lt;/SPAN&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: black; background: white;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG style="color: navy; background: white; font-size: 10.0pt; font-family: 'Courier New';"&gt;run&lt;/STRONG&gt;&lt;SPAN style="font-size: 10.0pt; font-family: 'Courier New'; color: black; background: white;"&gt;;&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 21 Aug 2015 00:00:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Locate-and-tag-current-next-and-previous-observations-by/m-p/203269#M37873</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2015-08-21T00:00:34Z</dc:date>
    </item>
    <item>
      <title>Re: Locate and tag current, next and previous observations by variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Locate-and-tag-current-next-and-previous-observations-by/m-p/203270#M37874</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Elegant! I know it goes without saying with all Tom's code, but I just couldn't help with this one! Thank you Tom !&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 21 Aug 2015 00:19:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Locate-and-tag-current-next-and-previous-observations-by/m-p/203270#M37874</guid>
      <dc:creator>Haikuo</dc:creator>
      <dc:date>2015-08-21T00:19:39Z</dc:date>
    </item>
    <item>
      <title>Re: Locate and tag current, next and previous observations by variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Locate-and-tag-current-next-and-previous-observations-by/m-p/203271#M37875</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;PRE&gt;data have;
input OBS ID $ FLAG $;
cards;
1 RED .&amp;nbsp;&amp;nbsp; 
2 RED&amp;nbsp; .
3 RED Y 
4 RED&amp;nbsp; .
5 RED&amp;nbsp;&amp;nbsp; .
6 BLUE Y 
7 BLUE&amp;nbsp; .
8 GREEN .
9 GREEN Y 
10 PURPLE&amp;nbsp;&amp;nbsp; .
11 PURPLE&amp;nbsp;&amp;nbsp; .
12 PURPLE&amp;nbsp; .
13 PURPLE Y .
14 PURPLE&amp;nbsp; .
15 PURPLE&amp;nbsp; .
;
run;
data want;
 merge have have(firstobs=2 keep=id flag rename=(id=_id flag=_flag)); 
 length POSTION $ 20;
 lag_flag=lag(flag);lag_id=lag(id);
 if FLAG='Y' then POSTION='CURRENT';
&amp;nbsp; else if missing(FLAG) and _FLAG='Y' and id=_id then POSTION='PREVIOUS';
&amp;nbsp;&amp;nbsp; else if missing(FLAG) and lag_flag='Y' and id=lag_id then POSTION='NEXT';
drop lag_: _:;
run;

&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Xia Keshan&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 21 Aug 2015 01:28:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Locate-and-tag-current-next-and-previous-observations-by/m-p/203271#M37875</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2015-08-21T01:28:12Z</dc:date>
    </item>
    <item>
      <title>Re: Locate and tag current, next and previous observations by variable</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Locate-and-tag-current-next-and-previous-observations-by/m-p/203272#M37876</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Yes, interesting idea Tom, would not have thought about using flag as a grouping variable with First/Last.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 21 Aug 2015 07:56:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Locate-and-tag-current-next-and-previous-observations-by/m-p/203272#M37876</guid>
      <dc:creator>RW9</dc:creator>
      <dc:date>2015-08-21T07:56:23Z</dc:date>
    </item>
  </channel>
</rss>

