<?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 output just the last observation in a group following a condition? in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/How-to-output-just-the-last-observation-in-a-group-following-a/m-p/895009#M353552</link>
    <description>&lt;P&gt;Hi, is this the logic you're after?&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;/* load data */
data have;
input ID $	YEAR	MONTH $	PRICE;
datalines;
A 2020 Janeiro 300
A 2021 Janeiro 0
A 2022 Janeiro 0
B 2021 Janeiro 300
B 2022 Abril 450
B 2022 Maio 400
B 2022 Junho 0
B 2022 Julho 0
;

/* assign month (quick workaround) */
data have;
set have;
if month = 'Janeiro' then mth=1;
if month='Abril' then mth=4;
if month = 'Maio' then mth=5;
if month = 'Junho' then mth=6;
if month = 'Julho' then mth=7;
run;

/* get last postive amount by year */
proc sql; create table filter as select id, year, max(mth) as mth from (select * from have where price gt 0) group  by id, year; quit;

/* filter by join */
proc sql;create table want as
select a.* from have as a inner join filter as b on a.id=b.id and a.year=b.year and a.mth=b.mth;quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="HarrySnart_0-1695200037185.png" style="width: 400px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/88161iAE3D5831F38659EC/image-size/medium?v=v2&amp;amp;px=400" role="button" title="HarrySnart_0-1695200037185.png" alt="HarrySnart_0-1695200037185.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Wed, 20 Sep 2023 08:54:04 GMT</pubDate>
    <dc:creator>HarrySnart</dc:creator>
    <dc:date>2023-09-20T08:54:04Z</dc:date>
    <item>
      <title>How to output just the last observation in a group following a condition?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-output-just-the-last-observation-in-a-group-following-a/m-p/894998#M353547</link>
      <description>&lt;P&gt;Hi all,&amp;nbsp;here's the result I got from SAS:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;YEAR&lt;/TD&gt;&lt;TD&gt;MONTH&lt;/TD&gt;&lt;TD&gt;PRICE&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;2020&lt;/TD&gt;&lt;TD&gt;Janeiro&lt;/TD&gt;&lt;TD&gt;300&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;2021&lt;/TD&gt;&lt;TD&gt;Janeiro&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;2022&lt;/TD&gt;&lt;TD&gt;Janeiro&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;2021&lt;/TD&gt;&lt;TD&gt;Janeiro&lt;/TD&gt;&lt;TD&gt;300&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;2022&lt;/TD&gt;&lt;TD&gt;Abril&lt;/TD&gt;&lt;TD&gt;450&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;2022&lt;/TD&gt;&lt;TD&gt;Maio&lt;/TD&gt;&lt;TD&gt;400&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;2022&lt;/TD&gt;&lt;TD&gt;Junho&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;2022&lt;/TD&gt;&lt;TD&gt;Julho&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Does anyone know how&amp;nbsp;to&amp;nbsp;output it like this:&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;YEAR&lt;/TD&gt;&lt;TD&gt;MONTH&lt;/TD&gt;&lt;TD&gt;PRICE&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;2020&lt;/TD&gt;&lt;TD&gt;Janeiro&lt;/TD&gt;&lt;TD&gt;300&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;2021&lt;/TD&gt;&lt;TD&gt;Janeiro&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;2022&lt;/TD&gt;&lt;TD&gt;Janeiro&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;2021&lt;/TD&gt;&lt;TD&gt;Janeiro&lt;/TD&gt;&lt;TD&gt;300&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;2022&lt;/TD&gt;&lt;TD&gt;Abril&lt;/TD&gt;&lt;TD&gt;450&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;2022&lt;/TD&gt;&lt;TD&gt;Maio&lt;/TD&gt;&lt;TD&gt;400&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;2022&lt;/TD&gt;&lt;TD&gt;Junho&lt;/TD&gt;&lt;TD&gt;400&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;2022&lt;/TD&gt;&lt;TD&gt;Julho&lt;/TD&gt;&lt;TD&gt;400&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;or just:&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;YEAR&lt;/TD&gt;&lt;TD&gt;PRICE&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;2020&lt;/TD&gt;&lt;TD&gt;300&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;2021&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;2022&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;2021&lt;/TD&gt;&lt;TD&gt;300&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;2022&lt;/TD&gt;&lt;TD&gt;400&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;So I can obtain the last positive (&amp;gt;0) price for each year and ID?&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you in advance!&lt;/P&gt;</description>
      <pubDate>Wed, 20 Sep 2023 08:25:50 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-output-just-the-last-observation-in-a-group-following-a/m-p/894998#M353547</guid>
      <dc:creator>InêsMaximiano</dc:creator>
      <dc:date>2023-09-20T08:25:50Z</dc:date>
    </item>
    <item>
      <title>Re: How to output just the last observation in a group following a condition?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-output-just-the-last-observation-in-a-group-following-a/m-p/895001#M353549</link>
      <description>&lt;P&gt;Untested:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
   set have;
   if price &amp;lt; 0 then delete;
   by id year;
   if last.year then output;
   keep id year price;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 20 Sep 2023 08:39:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-output-just-the-last-observation-in-a-group-following-a/m-p/895001#M353549</guid>
      <dc:creator>LinusH</dc:creator>
      <dc:date>2023-09-20T08:39:32Z</dc:date>
    </item>
    <item>
      <title>Re: How to output just the last observation in a group following a condition?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-output-just-the-last-observation-in-a-group-following-a/m-p/895009#M353552</link>
      <description>&lt;P&gt;Hi, is this the logic you're after?&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;/* load data */
data have;
input ID $	YEAR	MONTH $	PRICE;
datalines;
A 2020 Janeiro 300
A 2021 Janeiro 0
A 2022 Janeiro 0
B 2021 Janeiro 300
B 2022 Abril 450
B 2022 Maio 400
B 2022 Junho 0
B 2022 Julho 0
;

/* assign month (quick workaround) */
data have;
set have;
if month = 'Janeiro' then mth=1;
if month='Abril' then mth=4;
if month = 'Maio' then mth=5;
if month = 'Junho' then mth=6;
if month = 'Julho' then mth=7;
run;

/* get last postive amount by year */
proc sql; create table filter as select id, year, max(mth) as mth from (select * from have where price gt 0) group  by id, year; quit;

/* filter by join */
proc sql;create table want as
select a.* from have as a inner join filter as b on a.id=b.id and a.year=b.year and a.mth=b.mth;quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="HarrySnart_0-1695200037185.png" style="width: 400px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/88161iAE3D5831F38659EC/image-size/medium?v=v2&amp;amp;px=400" role="button" title="HarrySnart_0-1695200037185.png" alt="HarrySnart_0-1695200037185.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 20 Sep 2023 08:54:04 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-output-just-the-last-observation-in-a-group-following-a/m-p/895009#M353552</guid>
      <dc:creator>HarrySnart</dc:creator>
      <dc:date>2023-09-20T08:54:04Z</dc:date>
    </item>
    <item>
      <title>Re: How to output just the last observation in a group following a condition?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-output-just-the-last-observation-in-a-group-following-a/m-p/895011#M353554</link>
      <description>&lt;P&gt;Try this:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
data have;
input ID $	YEAR	MONTH $	PRICE;
cards;
A	2020	Janeiro	300
A	2021	Janeiro	0
A	2022	Janeiro	0
B	2021	Janeiro	300
B	2022	Abril	450
B	2022	Maio	400
B	2022	Junho	0
B	2022	Julho	0
;
run;
proc print;
run;

data want;
  merge have have(rename=(PRICE=P) where=(P&amp;gt;0));
  by ID	YEAR;
  PRICE = max(PRICE,P);
  if last.year;
  drop P MONTH;
run;
proc print;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Bart&lt;/P&gt;</description>
      <pubDate>Wed, 20 Sep 2023 09:04:36 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-output-just-the-last-observation-in-a-group-following-a/m-p/895011#M353554</guid>
      <dc:creator>yabwon</dc:creator>
      <dc:date>2023-09-20T09:04:36Z</dc:date>
    </item>
    <item>
      <title>Re: How to output just the last observation in a group following a condition?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-output-just-the-last-observation-in-a-group-following-a/m-p/895037#M353570</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input ID $	YEAR	MONTH $	PRICE;
datalines;
A 2020 Janeiro 300
A 2021 Janeiro 0
A 2022 Janeiro 0
B 2021 Janeiro 300
B 2022 Abril 450
B 2022 Maio 400
B 2022 Junho 0
B 2022 Julho 0
;
data want;
 do until(last.year);
  set have;
  by id year;
  if PRICE&amp;gt;0 then want=PRICE;
 end;
 want=coalesce(want,PRICE);
 keep id year want;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 20 Sep 2023 11:48:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-output-just-the-last-observation-in-a-group-following-a/m-p/895037#M353570</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2023-09-20T11:48:35Z</dc:date>
    </item>
    <item>
      <title>Re: How to output just the last observation in a group following a condition?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-to-output-just-the-last-observation-in-a-group-following-a/m-p/895040#M353571</link>
      <description>&lt;P&gt;If you want the multiple-obs-per-year output, then:&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input ID $	YEAR	MONTH $	PRICE;
datalines;
A 2020 Janeiro 300
A 2021 Janeiro 0
A 2022 Janeiro 0
B 2021 Janeiro 300
B 2022 Abril 450
B 2022 Maio 400
B 2022 Junho 0
B 2022 Julho 0
run;

data want (drop=_:);
  set have (rename=(price=_orig_price));
  by id year;
  retain price;
  price=ifn(_orig_price&amp;gt;0 or first.year,_orig_price,price);
  *if last.year;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;If you really want just one obs per year, then de-comment the subsetting IF statement.&lt;/P&gt;</description>
      <pubDate>Wed, 20 Sep 2023 12:18:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-to-output-just-the-last-observation-in-a-group-following-a/m-p/895040#M353571</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2023-09-20T12:18:26Z</dc:date>
    </item>
  </channel>
</rss>

