<?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: How to skip an OBS with blank value  and flag next OBS with value in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/How-to-skip-an-OBS-with-blank-value-and-flag-next-OBS-with-value/m-p/339909#M77603</link>
    <description>&lt;P&gt;Probably the easiest way is to sort differently:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;proc sort data=one;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;by id test visit ptnum&amp;nbsp;&lt;FONT color="#FF0000"&gt;descending&lt;/FONT&gt; date;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;run;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;data two;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;set one;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;by id test visit ptnum&amp;nbsp;&lt;FONT color="#FF0000"&gt;descending&lt;/FONT&gt; date;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;retain ever_flagged;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;if first.ptnum&amp;nbsp;then ever_flagged=0;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;if val&amp;nbsp;&amp;gt; . then ever_flagged + 1;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;if ever_flagged=1 then do;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp;flag='Y';&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp;ever_flagged + 1;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;end;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;drop ever_flagged;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;run;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;If you would like, you can always put the data back into the order you want:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;proc sort data=two;&lt;BR /&gt;by id test visit ptnum date;&lt;BR /&gt;run;&lt;/SPAN&gt;&lt;/P&gt;</description>
    <pubDate>Fri, 10 Mar 2017 12:43:43 GMT</pubDate>
    <dc:creator>Astounding</dc:creator>
    <dc:date>2017-03-10T12:43:43Z</dc:date>
    <item>
      <title>How to skip an OBS with blank value  and flag next OBS with value</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-skip-an-OBS-with-blank-value-and-flag-next-OBS-with-value/m-p/339890#M77591</link>
      <description>&lt;P&gt;Dear,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I need to flag the OBS based on a sort order. Is there a way to flag the prior OBS with non blank value if a blank value is present &amp;nbsp;for the obs. Eg. For ID=3, in my output i am flagging last OBS which is blank value. In my output, &amp;nbsp;i need to skip it and flag the prior non blank OBS .Please help . Thank you.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;data one;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;input id visit test $ val ptnum date $19.;&lt;BR /&gt;datalines;&lt;BR /&gt;1 1 temp 88 2 2010-04-27&lt;BR /&gt;1 1 temp 90 2 2010-04-28&lt;BR /&gt;1 1 temp 92 2 2010-04-29&lt;BR /&gt;2 1 temp 100 2 2010-05-27&lt;BR /&gt;2 1 temp 98 2 2010-05-28&lt;BR /&gt;2 1 temp 96 2 2010-05-29&lt;BR /&gt;3 1 temp 100 2 2010-05-27&lt;BR /&gt;3 1 temp 98 2 2010-05-28&lt;BR /&gt;3 1 temp . 2 2010-05-29&lt;BR /&gt;;&lt;BR /&gt;proc sort data=one;&lt;BR /&gt;by id test visit ptnum date;&lt;BR /&gt;run;&lt;BR /&gt;data two;&lt;BR /&gt;set one;&lt;BR /&gt;by id test visit ptnum date;&lt;BR /&gt;if last.ptnum then flag='Y';&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;output need;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;1 1 temp 88 2 2010-04-27 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;1 1 temp 90 2 2010-04-28&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;1 1 temp 92 2 2010-04-29 &amp;nbsp; &amp;nbsp; Y&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;2 1 temp 100 2 2010-05-27 &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;2 1 temp 98 2 2010-05-28&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;2 1 temp 96 2 2010-05-29 &amp;nbsp; &amp;nbsp; &amp;nbsp;Y&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;3 1 temp 100 2 2010-05-27 &lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;3 1 temp 98 2 2010-05-28 &amp;nbsp; &amp;nbsp; &amp;nbsp; Y&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;3 1 temp . 2 2010-05-29&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;OUTPUT GETTING&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;1 1 temp 88 2 2010-04-27&lt;BR /&gt;1 1 temp 90 2 2010-04-28&lt;BR /&gt;1 1 temp 92 2 2010-04-29 &amp;nbsp; &amp;nbsp; Y&lt;BR /&gt;2 1 temp 100 2 2010-05-27&lt;BR /&gt;2 1 temp 98 2 2010-05-28&lt;BR /&gt;2 1 temp 96 2 2010-05-29 &amp;nbsp; &amp;nbsp; &amp;nbsp; Y&lt;BR /&gt;3 1 temp 100 2 2010-05-27&lt;BR /&gt;3 1 temp 98 2 2010-05-28&lt;BR /&gt;3 1 temp . 2 2010-05-29 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Y&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 10 Mar 2017 05:44:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-skip-an-OBS-with-blank-value-and-flag-next-OBS-with-value/m-p/339890#M77591</guid>
      <dc:creator>knveraraju91</dc:creator>
      <dc:date>2017-03-10T05:44:26Z</dc:date>
    </item>
    <item>
      <title>Re: How to skip an OBS with blank value  and flag next OBS with value</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-skip-an-OBS-with-blank-value-and-flag-next-OBS-with-value/m-p/339909#M77603</link>
      <description>&lt;P&gt;Probably the easiest way is to sort differently:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;proc sort data=one;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;by id test visit ptnum&amp;nbsp;&lt;FONT color="#FF0000"&gt;descending&lt;/FONT&gt; date;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;run;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;data two;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;set one;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;by id test visit ptnum&amp;nbsp;&lt;FONT color="#FF0000"&gt;descending&lt;/FONT&gt; date;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;retain ever_flagged;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;if first.ptnum&amp;nbsp;then ever_flagged=0;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;if val&amp;nbsp;&amp;gt; . then ever_flagged + 1;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;if ever_flagged=1 then do;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp;flag='Y';&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp;ever_flagged + 1;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;end;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;drop ever_flagged;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;run;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;If you would like, you can always put the data back into the order you want:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;proc sort data=two;&lt;BR /&gt;by id test visit ptnum date;&lt;BR /&gt;run;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 10 Mar 2017 12:43:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-skip-an-OBS-with-blank-value-and-flag-next-OBS-with-value/m-p/339909#M77603</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2017-03-10T12:43:43Z</dc:date>
    </item>
    <item>
      <title>Re: How to skip an OBS with blank value  and flag next OBS with value</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-skip-an-OBS-with-blank-value-and-flag-next-OBS-with-value/m-p/339916#M77607</link>
      <description>&lt;PRE&gt;

data one;
input id visit test $ val ptnum date $19.;
datalines;
1 1 temp 88 2 2010-04-27
1 1 temp 90 2 2010-04-28
1 1 temp 92 2 2010-04-29
2 1 temp 100 2 2010-05-27
2 1 temp 98 2 2010-05-28
2 1 temp 96 2 2010-05-29
3 1 temp 100 2 2010-05-27
3 1 temp 98 2 2010-05-28
3 1 temp . 2 2010-05-29
;

data want;
 do i=1 by 1 until(last.test);
  set one;
  by id visit test;
  if not missing(val) then n=i;
 end;
 
 do j=1 by 1 until(last.test);
  set one;
  by id visit test;
  flag=' ';
  if j=n then flag='Y';
  output;
 end;
 
 drop n i j;
run;


&lt;/PRE&gt;</description>
      <pubDate>Fri, 10 Mar 2017 08:17:50 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-skip-an-OBS-with-blank-value-and-flag-next-OBS-with-value/m-p/339916#M77607</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2017-03-10T08:17:50Z</dc:date>
    </item>
    <item>
      <title>Re: How to skip an OBS with blank value  and flag next OBS with value</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-skip-an-OBS-with-blank-value-and-flag-next-OBS-with-value/m-p/339943#M77619</link>
      <description>&lt;P&gt;Another option:&lt;/P&gt;
&lt;PRE&gt;data one;
  input id visit test $ val ptnum date $19.;
datalines;
1 1 temp 88 2 2010-04-27
1 1 temp 90 2 2010-04-28
1 1 temp 92 2 2010-04-29
2 1 temp 100 2 2010-05-27
2 1 temp 98 2 2010-05-28
2 1 temp 96 2 2010-05-29
3 1 temp 100 2 2010-05-27
3 1 temp 98 2 2010-05-28
3 1 temp . 2 2010-05-29
;
run;

proc sql;
  create table WANT as
  select  A.*,
          B.FLAG
  from    WORK.ONE A
  left join (select ID,
                    VISIT,
                    TEST,
                    PTNUM,
                    max(input(DATE,yymmdd10.)) as MDATE,
                    "Y" as FLAG
             from   (select * from WORK.ONE where VAL ne .)
             group by ID,VISIT,TEST,PTNUM) B
  on      A.ID=B.ID
  and     A.VISIT=B.VISIT
  and     A.TEST=B.TEST
  and     A.PTNUM=B.PTNUM
  and     A.DATE=put(MDATE,yymmdd10.);
quit;
                     &lt;/PRE&gt;</description>
      <pubDate>Fri, 10 Mar 2017 09:44:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-skip-an-OBS-with-blank-value-and-flag-next-OBS-with-value/m-p/339943#M77619</guid>
      <dc:creator>RW9</dc:creator>
      <dc:date>2017-03-10T09:44:12Z</dc:date>
    </item>
    <item>
      <title>Re: How to skip an OBS with blank value  and flag next OBS with value</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-skip-an-OBS-with-blank-value-and-flag-next-OBS-with-value/m-p/340152#M77709</link>
      <description>&lt;P&gt;Hellow, it wer me, I would do it like this&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;data one;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;input id visit test $ val ptnum date $19.;&lt;BR /&gt;datalines;&lt;BR /&gt;1 1 temp 88 2 2010-04-27&lt;BR /&gt;1 1 temp 90 2 2010-04-28&lt;BR /&gt;1 1 temp 92 2 2010-04-29&lt;BR /&gt;2 1 temp 100 2 2010-05-27&lt;BR /&gt;2 1 temp 98 2 2010-05-28&lt;BR /&gt;2 1 temp 96 2 2010-05-29&lt;BR /&gt;3 1 temp 100 2 2010-05-27&lt;BR /&gt;3 1 temp 98 2 2010-05-28&lt;BR /&gt;3 1 temp . 2 2010-05-29&lt;BR /&gt;;&lt;/P&gt;&lt;P&gt;run ;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;/*&amp;nbsp;Insert step1&amp;nbsp;*/&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;data ONE ;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;&amp;nbsp; set ONE ;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;&amp;nbsp; DUMMY_DATE = ^(missing(VAL)) * input(DATE, yymmdd10.) ;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;run ;&lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;proc sort data=one;&lt;BR /&gt;by id test visit ptnum &lt;STRONG&gt;DUMMY_DATE&lt;/STRONG&gt;;&lt;BR /&gt;run;&lt;BR /&gt;data two&lt;STRONG&gt;(drop=DUMMY_DATE)&lt;/STRONG&gt;;&lt;BR /&gt;set one;&lt;BR /&gt;by id test visit ptnum &lt;STRONG&gt;DUMMY_DATE&lt;/STRONG&gt;;&lt;BR /&gt;if last.ptnum then flag='Y';&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;/*&amp;nbsp;Insert step2&amp;nbsp;*/&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;proc sort data=two;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;by id test visit ptnum date;&lt;/STRONG&gt;&lt;BR /&gt;&lt;STRONG&gt;run;&lt;/STRONG&gt;&lt;/P&gt;</description>
      <pubDate>Sat, 11 Mar 2017 09:19:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-skip-an-OBS-with-blank-value-and-flag-next-OBS-with-value/m-p/340152#M77709</guid>
      <dc:creator>Genki_Tsuji</dc:creator>
      <dc:date>2017-03-11T09:19:12Z</dc:date>
    </item>
    <item>
      <title>Re: How to skip an OBS with blank value  and flag next OBS with value</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-skip-an-OBS-with-blank-value-and-flag-next-OBS-with-value/m-p/340188#M77725</link>
      <description>&lt;P&gt;First, I try to resist the atavistic impulse to sort a data set by descending order as a means of looking ahead, especially if you're going to re-sort by ascending order - very expensive for large data sets.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You want to flag the last non-missing record for each by group:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data v_need / view=v_need;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; set one;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; by id test visit ptnum;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; where val^=.;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; if last.ptnum;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;flag='Y';&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;data two;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; merge one v_need;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;by id test visit ptnum date;&lt;/P&gt;
&lt;P&gt;run;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;** This looks like two passes through the data, but V_NEED is a data set view, not a data set file.&amp;nbsp; That means it is not written to disk, and is activated until called in the DATA TWO step - at which point it is streamed to the data two step.&amp;nbsp; As a&amp;nbsp;result, in data two, there wlil be two simultaneous streams of input from dataset ONE.&amp;nbsp; In turn that means that ONE&amp;nbsp;is physically&amp;nbsp;being accessed only once, because the disk input blocks for one stream will be cached in memory and used by the other stream, all thanks to your operating system.&lt;/P&gt;</description>
      <pubDate>Sat, 11 Mar 2017 21:14:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-skip-an-OBS-with-blank-value-and-flag-next-OBS-with-value/m-p/340188#M77725</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2017-03-11T21:14:01Z</dc:date>
    </item>
  </channel>
</rss>

