<?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: Getting output from last row in SAS Data Management</title>
    <link>https://communities.sas.com/t5/SAS-Data-Management/Getting-output-from-last-row/m-p/492318#M15309</link>
    <description>&lt;P&gt;So when there is a row with DUMMY=1 you want to skip the rule that outputs the last observation?&lt;/P&gt;
&lt;P&gt;What happens if there are multiple rows with DUMMY=1 in a group?&amp;nbsp; Do you want to output multiple rows? First one? Last one?&lt;/P&gt;
&lt;P&gt;What happens if DUMMY=1 is the FIRST observation for a group?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Assuming that you want to output any record where the NEXT record has the DUMMY flag set and if none were found then output the last observation then you could use code like this:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data HAVE ;
  input Bidder :$10. Cum_vol Target Dummy ID Penalty ;
datalines4;
ByronHal 100 800 0 1 7000
ByronHal 250 800 0 1 5500
ByronHal 500 800 0 1 3000
EdyssaPal 200 500 0 2 3000
EdyssaPal 600 500 0 2 -1000
EdyssaPal 150 500 1 2 3500
KellyO'L 500 400 0 3 1000
KellyO'L 250 400 1 3 1500
KellyO'L 300 400 0 3 1000
KellyO'L 400 400 0 3 0
;;;;

data want ;
  do until (last.bidder);
    set have end=eof;
    by bidder ;
    if not eof then set have(firstobs=2 keep=dummy rename=(dummy=next_dummy));
    else call missing(next_dummy);
    if next_dummy and not last.bidder then do;
      output;
      any=1;
    end;
  end;
  if not any then output;
  drop any;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Tue, 04 Sep 2018 14:39:17 GMT</pubDate>
    <dc:creator>Tom</dc:creator>
    <dc:date>2018-09-04T14:39:17Z</dc:date>
    <item>
      <title>Getting output from last row</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/Getting-output-from-last-row/m-p/492225#M15298</link>
      <description>&lt;P&gt;Hi Everyone,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have a data set from which I want to keep some observations. First, let me&amp;nbsp;give some ideas about the data set. The data set contains the following things:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Bidder&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Cum_vol&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Target&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Dummy&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ID &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Penalty&lt;/P&gt;&lt;P&gt;ByronHal&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 100&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 800&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; &amp;nbsp; &amp;nbsp; 1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;7000&lt;/P&gt;&lt;P&gt;ByronHal&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;250&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;800&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; &amp;nbsp; &amp;nbsp; 1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;5500&lt;/P&gt;&lt;P&gt;ByronHal&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;500&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;800&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; &amp;nbsp; &amp;nbsp; 1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;3000&lt;/P&gt;&lt;P&gt;EdyssaPal&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 200&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;500&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; &amp;nbsp; &amp;nbsp; 2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;3000&lt;/P&gt;&lt;P&gt;EdyssaPal&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 600&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;500&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; &amp;nbsp; &amp;nbsp; 2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-1000&lt;/P&gt;&lt;P&gt;EdyssaPal&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 150&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;500&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 3500&lt;/P&gt;&lt;P&gt;KellyO'L&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 500&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;400&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; &amp;nbsp; &amp;nbsp; 3&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1000&lt;/P&gt;&lt;P&gt;KellyO'L&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 250&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;400&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 3&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1500&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;KellyO'L&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 300&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;400&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; &amp;nbsp; &amp;nbsp; 3&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1000&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;KellyO'L&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 400&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;400&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; &amp;nbsp; &amp;nbsp; 3&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;0&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Now, I want to keep only the last row of each ID (let's say for ID=1, so penalty will be 3000).&amp;nbsp;Second, where dummy=1, I want to keep that row immediate before that dummy. Let's say for ID=2, penalty= -1000 and for ID=3, penalty= 1000. The final output should look like the following format.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Bidder&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Cum_vol&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Target&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Dummy&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;ID&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Penalty&lt;/P&gt;&lt;P&gt;ByronHal&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;500&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;800&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; &amp;nbsp; &amp;nbsp; 1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;3000&lt;/P&gt;&lt;P&gt;EdyssaPal&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 600&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;500&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; &amp;nbsp; &amp;nbsp; 2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-1000&lt;/P&gt;&lt;P&gt;KellyO'L&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 500&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;400&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; &amp;nbsp; &amp;nbsp; 3&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1000&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Please help to solve this. Any help would be highly appreciated.&lt;/P&gt;&lt;P&gt;Thank you in advance!!&lt;/P&gt;</description>
      <pubDate>Tue, 04 Sep 2018 08:32:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/Getting-output-from-last-row/m-p/492225#M15298</guid>
      <dc:creator>Zakir</dc:creator>
      <dc:date>2018-09-04T08:32:24Z</dc:date>
    </item>
    <item>
      <title>Re: Getting output from last row</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/Getting-output-from-last-row/m-p/492315#M15308</link>
      <description>&lt;P&gt;If I understand your requirements correctly, then do&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
length Bidder $20;
input Bidder $ Cum_vol Target Dummy ID Penalty;
datalines;
ByronHal 100 800 0 1 7000
ByronHal 250 800 0 1 5500
ByronHal 500 800 0 1 3000
EdyssaPal 200 500 0 2 3000
EdyssaPal 600 500 0 2 -1000
EdyssaPal 150 500 1 2 3500
KellyO'L 500 400 0 3 1000
KellyO'L 250 400 1 3 1500
KellyO'L 300 400 0 3 1000
KellyO'L 400 400 0 3 0
;

data want;
   set have;
   by ID;
   where dummy ne 1 and penalty ne 0;
   if last.ID;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 04 Sep 2018 14:25:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/Getting-output-from-last-row/m-p/492315#M15308</guid>
      <dc:creator>PeterClemmensen</dc:creator>
      <dc:date>2018-09-04T14:25:27Z</dc:date>
    </item>
    <item>
      <title>Re: Getting output from last row</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/Getting-output-from-last-row/m-p/492318#M15309</link>
      <description>&lt;P&gt;So when there is a row with DUMMY=1 you want to skip the rule that outputs the last observation?&lt;/P&gt;
&lt;P&gt;What happens if there are multiple rows with DUMMY=1 in a group?&amp;nbsp; Do you want to output multiple rows? First one? Last one?&lt;/P&gt;
&lt;P&gt;What happens if DUMMY=1 is the FIRST observation for a group?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Assuming that you want to output any record where the NEXT record has the DUMMY flag set and if none were found then output the last observation then you could use code like this:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data HAVE ;
  input Bidder :$10. Cum_vol Target Dummy ID Penalty ;
datalines4;
ByronHal 100 800 0 1 7000
ByronHal 250 800 0 1 5500
ByronHal 500 800 0 1 3000
EdyssaPal 200 500 0 2 3000
EdyssaPal 600 500 0 2 -1000
EdyssaPal 150 500 1 2 3500
KellyO'L 500 400 0 3 1000
KellyO'L 250 400 1 3 1500
KellyO'L 300 400 0 3 1000
KellyO'L 400 400 0 3 0
;;;;

data want ;
  do until (last.bidder);
    set have end=eof;
    by bidder ;
    if not eof then set have(firstobs=2 keep=dummy rename=(dummy=next_dummy));
    else call missing(next_dummy);
    if next_dummy and not last.bidder then do;
      output;
      any=1;
    end;
  end;
  if not any then output;
  drop any;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 04 Sep 2018 14:39:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/Getting-output-from-last-row/m-p/492318#M15309</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2018-09-04T14:39:17Z</dc:date>
    </item>
    <item>
      <title>Re: Getting output from last row</title>
      <link>https://communities.sas.com/t5/SAS-Data-Management/Getting-output-from-last-row/m-p/492539#M15333</link>
      <description>&lt;P&gt;Hi Tom,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you for your help. The questions you put forward are very important. I appreciate your intelligence and programming skill. I have checked your codes and found that after proc sort nodupkey,&amp;nbsp; I am getting what I wanted. I would look forward to get further help in the future.&amp;nbsp;Finally,&amp;nbsp;let me thank you again to resolve this!!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Kind Regards,&lt;/P&gt;&lt;P&gt;Zakir&lt;/P&gt;</description>
      <pubDate>Wed, 05 Sep 2018 03:32:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Data-Management/Getting-output-from-last-row/m-p/492539#M15333</guid>
      <dc:creator>Zakir</dc:creator>
      <dc:date>2018-09-05T03:32:43Z</dc:date>
    </item>
  </channel>
</rss>

