<?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: Retain and getting max values in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Retain-and-getting-max-values/m-p/753302#M237395</link>
    <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data data;
input @1 seqno $8.	@9 grade 1. @11 aedtc $11. @22 aeevnt 1.;
cards;
K-001   1 .          0
K-001   2 .          0
K-001   2 19DEC2019  1
K-001   3 19DEC2019  1
K-001   3 .          0
K-002   1 .          0
K-002   4 .          0
K-002   3 20APR2020  1
K-002   1 .	         0
K-003   2 20JAN2020	 1
K-003   2 20JAN2020	 1
K-003   1 .	         0
K-003   3 .	         0
K-003   3 23JAN2020	 1
K-003   3 .	         0
K-003   1 .	         0
K-003   . .	         0
K-003   1 .	         0
K-003   3 .	         0
K-003   2 .	         0
K-005   2 .	         0
K-005   1 .	         0
K-005   1 .	         0
K-006   3 30APR2021	 1
K-006   3 30APR2021	 1
K-006   1 .	         0
K-006   2 06APR2021	 1
K-006   2 06APR2021	 1
K-006   1 .	         0
K-006   2 .	         0
K-006   3 .	         0
K-006   1 .	         0
K-007   1 .	         0
K-007   3 .	         0
K-007   1 .	         0
K-007   1 .	         0
DK-001  2 .	         0
DK-001  . .	         0
DK-001  2 .	         0
DK-001  . .	         0
DK-001  1 .	         0
DK-003  . .	         0
DK-003  2 .	         0
DK-003  . .	         0
DK-003  2 .	         0
DK-003  1 .	         0
DK-003  1 .	         0
DK-005  . .	         0
DK-006  . .	         0
DK-007  . .	         0
CDK-001 2 .	         0
CDK-001 3 .	         0
CDK-001 2 .	         0
CDK-001 3 04SEP2020  1
CDK-001 3 .	         0
CDK-002 1 .	         0
CDK-002 3 .	         0
;
run;

proc sql number;
	create table data2 as select * from data
		group by seqno
		having grade=max(grade)
		order by seqno, aedtc;
quit;

data data3;
	set data2;
	by seqno aedtc;
	if last.seqno then output;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Sat, 10 Jul 2021 00:28:36 GMT</pubDate>
    <dc:creator>tarheel13</dc:creator>
    <dc:date>2021-07-10T00:28:36Z</dc:date>
    <item>
      <title>Retain and getting max values</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Retain-and-getting-max-values/m-p/753300#M237394</link>
      <description>&lt;P&gt;I have the below data. I want to create new variables with last aedtc date with corresponding max grade and where ever aeevnt is 1 I want to retain to the corresponding record.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data data;
input @1 seqno $8.	@9 grade 1. @11 aedtc $11. @22 aeevnt 1.;
cards;
K-001   1 .          0
K-001   2 .          0
K-001   2 19DEC2019  1
K-001   3 19DEC2019  1
K-001   3 .          0
K-002   1 .          0
K-002   4 .          0
K-002   3 20APR2020  1
K-002   1 .	         0
K-003   2 20JAN2020	 1
K-003   2 20JAN2020	 1
K-003   1 .	         0
K-003   3 .	         0
K-003   3 23JAN2020	 1
K-003   3 .	         0
K-003   1 .	         0
K-003   . .	         0
K-003   1 .	         0
K-003   3 .	         0
K-003   2 .	         0
K-005   2 .	         0
K-005   1 .	         0
K-005   1 .	         0
K-006   3 30APR2021	 1
K-006   3 30APR2021	 1
K-006   1 .	         0
K-006   2 06APR2021	 1
K-006   2 06APR2021	 1
K-006   1 .	         0
K-006   2 .	         0
K-006   3 .	         0
K-006   1 .	         0
K-007   1 .	         0
K-007   3 .	         0
K-007   1 .	         0
K-007   1 .	         0
DK-001  2 .	         0
DK-001  . .	         0
DK-001  2 .	         0
DK-001  . .	         0
DK-001  1 .	         0
DK-003  . .	         0
DK-003  2 .	         0
DK-003  . .	         0
DK-003  2 .	         0
DK-003  1 .	         0
DK-003  1 .	         0
DK-005  . .	         0
DK-006  . .	         0
DK-007  . .	         0
CDK-001 2 .	         0
CDK-001 3 .	         0
CDK-001 2 .	         0
CDK-001 3 2 4SEP2020 1
CDK-001 3 .	         0
CDK-002 1 .	         0
CDK-002 3 .	         0
;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;My final output dataset should have only one record per pateint.&lt;BR /&gt;K-001 3 19DEC2019 1&lt;BR /&gt;K-002 3 20APR2020 1&lt;BR /&gt;K-003 3 23JAN2020 1&lt;BR /&gt;K-005 2 . 0&lt;BR /&gt;K-006 3 06APR2021 1&lt;BR /&gt;K-007 3 . 0&lt;BR /&gt;DK-001 2 . 0&lt;BR /&gt;DK-003 2 . 0&lt;BR /&gt;DK-005 . . 0&lt;BR /&gt;DK-006 . . 0&lt;BR /&gt;DK-007 . . 0&lt;BR /&gt;CDK-001 3 2 4SEP2020 1&lt;BR /&gt;CDK-002 3 . 0&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;</description>
      <pubDate>Sat, 10 Jul 2021 00:09:41 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Retain-and-getting-max-values/m-p/753300#M237394</guid>
      <dc:creator>RAVI2000</dc:creator>
      <dc:date>2021-07-10T00:09:41Z</dc:date>
    </item>
    <item>
      <title>Re: Retain and getting max values</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Retain-and-getting-max-values/m-p/753302#M237395</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data data;
input @1 seqno $8.	@9 grade 1. @11 aedtc $11. @22 aeevnt 1.;
cards;
K-001   1 .          0
K-001   2 .          0
K-001   2 19DEC2019  1
K-001   3 19DEC2019  1
K-001   3 .          0
K-002   1 .          0
K-002   4 .          0
K-002   3 20APR2020  1
K-002   1 .	         0
K-003   2 20JAN2020	 1
K-003   2 20JAN2020	 1
K-003   1 .	         0
K-003   3 .	         0
K-003   3 23JAN2020	 1
K-003   3 .	         0
K-003   1 .	         0
K-003   . .	         0
K-003   1 .	         0
K-003   3 .	         0
K-003   2 .	         0
K-005   2 .	         0
K-005   1 .	         0
K-005   1 .	         0
K-006   3 30APR2021	 1
K-006   3 30APR2021	 1
K-006   1 .	         0
K-006   2 06APR2021	 1
K-006   2 06APR2021	 1
K-006   1 .	         0
K-006   2 .	         0
K-006   3 .	         0
K-006   1 .	         0
K-007   1 .	         0
K-007   3 .	         0
K-007   1 .	         0
K-007   1 .	         0
DK-001  2 .	         0
DK-001  . .	         0
DK-001  2 .	         0
DK-001  . .	         0
DK-001  1 .	         0
DK-003  . .	         0
DK-003  2 .	         0
DK-003  . .	         0
DK-003  2 .	         0
DK-003  1 .	         0
DK-003  1 .	         0
DK-005  . .	         0
DK-006  . .	         0
DK-007  . .	         0
CDK-001 2 .	         0
CDK-001 3 .	         0
CDK-001 2 .	         0
CDK-001 3 04SEP2020  1
CDK-001 3 .	         0
CDK-002 1 .	         0
CDK-002 3 .	         0
;
run;

proc sql number;
	create table data2 as select * from data
		group by seqno
		having grade=max(grade)
		order by seqno, aedtc;
quit;

data data3;
	set data2;
	by seqno aedtc;
	if last.seqno then output;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Sat, 10 Jul 2021 00:28:36 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Retain-and-getting-max-values/m-p/753302#M237395</guid>
      <dc:creator>tarheel13</dc:creator>
      <dc:date>2021-07-10T00:28:36Z</dc:date>
    </item>
    <item>
      <title>Re: Retain and getting max values</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Retain-and-getting-max-values/m-p/753305#M237397</link>
      <description>&lt;P&gt;Using the date variable &lt;STRONG&gt;aedtc&lt;/STRONG&gt; as numeric-&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data data;
input @1 seqno $8.	@9 grade 1.  aedtc :date9. @22 aeevnt 1.;
format aedtc date9.;
cards;
K-001   1 .          0
K-001   2 .          0
K-001   2 19DEC2019  1
K-001   3 19DEC2019  1
K-001   3 .          0
K-002   1 .          0
K-002   4 .          0
K-002   3 20APR2020  1
K-002   1 .	         0
K-003   2 20JAN2020	 1
K-003   2 20JAN2020	 1
K-003   1 .	         0
K-003   3 .	         0
K-003   3 23JAN2020	 1
K-003   3 .	         0
K-003   1 .	         0
K-003   . .	         0
K-003   1 .	         0
K-003   3 .	         0
K-003   2 .	         0
K-005   2 .	         0
K-005   1 .	         0
K-005   1 .	         0
K-006   3 30APR2021	 1
K-006   3 30APR2021	 1
K-006   1 .	         0
K-006   2 06APR2021	 1
K-006   2 06APR2021	 1
K-006   1 .	         0
K-006   2 .	         0
K-006   3 .	         0
K-006   1 .	         0
K-007   1 .	         0
K-007   3 .	         0
K-007   1 .	         0
K-007   1 .	         0
DK-001  2 .	         0
DK-001  . .	         0
DK-001  2 .	         0
DK-001  . .	         0
DK-001  1 .	         0
DK-003  . .	         0
DK-003  2 .	         0
DK-003  . .	         0
DK-003  2 .	         0
DK-003  1 .	         0
DK-003  1 .	         0
DK-005  . .	         0
DK-006  . .	         0
DK-007  . .	         0
CDK-001 2 .	         0
CDK-001 3 .	         0
CDK-001 2 .	         0
CDK-001 3 04SEP2020  1
CDK-001 3 .	         0
CDK-002 1 .	         0
CDK-002 3 .	         0
;
run;

proc sql;
  create table want as
  select distinct *
  from data 
  group by seqno
  having aeevnt and max(grade*aeevnt)=grade
  or not max(aeevnt) and max(grade)=grade;
 quit;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;TABLE class="table" aria-label="Data Set WORK.WANT"&gt;&lt;CAPTION aria-label="Data Set WORK.WANT"&gt;&amp;nbsp;&lt;/CAPTION&gt;&lt;COLGROUP&gt;&lt;COL /&gt;&lt;COL /&gt;&lt;COL /&gt;&lt;COL /&gt;&lt;/COLGROUP&gt;
&lt;THEAD&gt;
&lt;TR&gt;
&lt;TH class="header" scope="col"&gt;seqno&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;grade&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;aedtc&lt;/TH&gt;
&lt;TH class="r header" scope="col"&gt;aeevnt&lt;/TH&gt;
&lt;/TR&gt;
&lt;/THEAD&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class="data"&gt;CDK-001&lt;/TD&gt;
&lt;TD class="r data"&gt;3&lt;/TD&gt;
&lt;TD class="r data"&gt;04SEP2020&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="data"&gt;CDK-002&lt;/TD&gt;
&lt;TD class="r data"&gt;3&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="data"&gt;DK-001&lt;/TD&gt;
&lt;TD class="r data"&gt;2&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="data"&gt;DK-003&lt;/TD&gt;
&lt;TD class="r data"&gt;2&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="data"&gt;DK-005&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="data"&gt;DK-006&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="data"&gt;DK-007&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="data"&gt;K-001&lt;/TD&gt;
&lt;TD class="r data"&gt;3&lt;/TD&gt;
&lt;TD class="r data"&gt;19DEC2019&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="data"&gt;K-002&lt;/TD&gt;
&lt;TD class="r data"&gt;3&lt;/TD&gt;
&lt;TD class="r data"&gt;20APR2020&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="data"&gt;K-003&lt;/TD&gt;
&lt;TD class="r data"&gt;3&lt;/TD&gt;
&lt;TD class="r data"&gt;23JAN2020&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="data"&gt;K-005&lt;/TD&gt;
&lt;TD class="r data"&gt;2&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="data"&gt;K-006&lt;/TD&gt;
&lt;TD class="r data"&gt;3&lt;/TD&gt;
&lt;TD class="r data"&gt;30APR2021&lt;/TD&gt;
&lt;TD class="r data"&gt;1&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class="data"&gt;K-007&lt;/TD&gt;
&lt;TD class="r data"&gt;3&lt;/TD&gt;
&lt;TD class="r data"&gt;.&lt;/TD&gt;
&lt;TD class="r data"&gt;0&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;</description>
      <pubDate>Sat, 10 Jul 2021 02:42:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Retain-and-getting-max-values/m-p/753305#M237397</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2021-07-10T02:42:01Z</dc:date>
    </item>
    <item>
      <title>Re: Retain and getting max values</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Retain-and-getting-max-values/m-p/753307#M237398</link>
      <description>It works!! Can this also be explained in first. last. concept ?</description>
      <pubDate>Sat, 10 Jul 2021 03:06:57 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Retain-and-getting-max-values/m-p/753307#M237398</guid>
      <dc:creator>RAVI2000</dc:creator>
      <dc:date>2021-07-10T03:06:57Z</dc:date>
    </item>
    <item>
      <title>Re: Retain and getting max values</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Retain-and-getting-max-values/m-p/753308#M237399</link>
      <description>If you observe the data for grade variable with subject K-002 has max grade 4. It's not capturing the max grade here. I tried modifying but still not working.</description>
      <pubDate>Sat, 10 Jul 2021 03:20:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Retain-and-getting-max-values/m-p/753308#M237399</guid>
      <dc:creator>RAVI2000</dc:creator>
      <dc:date>2021-07-10T03:20:18Z</dc:date>
    </item>
    <item>
      <title>Re: Retain and getting max values</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Retain-and-getting-max-values/m-p/753310#M237400</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/294544"&gt;@RAVI2000&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;If you observe the data for grade variable with subject K-002 has max grade 4. It's not capturing the max grade here. I tried modifying but still not working.&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;The reason&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/138205"&gt;@novinosrin&lt;/a&gt;&amp;nbsp;'s program does not generate a max grade 4 for K-002 is because neither your sample solution data, nor does your description suggest it should generate a 4.&amp;nbsp; The 4 only occurs with a missing aedtc date.&amp;nbsp; Your description presumably would rule that out:&lt;/P&gt;
&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;"&lt;SPAN&gt;last aedtc date with corresponding max grade"&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Here is a data step solution that retains the last record with a date (not necessarily the latest date), and retains the max grade for dated, and max grade for undated records.&amp;nbsp; It then generates the results you specify:&lt;/SPAN&gt;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
data want (drop=_:);
  set data;
  by seqno notsorted;

  retain _lastest_date _maxgrade_dated  _maxgrade_undated ;
  if first.seqno then call missing (of _:);

  if aedtc^=. then do;
    _lastest_date=aedtc;
    _maxgrade_dated=max(_maxgrade_dated,grade);
  end;
  else if grade^=. then _maxgrade_undated=max(_maxgrade_undated,grade);

  if last.seqno;
  aedtc=_lastest_date;
  grade=coalesce(_maxgrade_dated,_maxgrade_undated);
  if aedtc^=. then aeevnt=1;
run;&lt;/CODE&gt;&lt;/PRE&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;</description>
      <pubDate>Sat, 10 Jul 2021 05:13:05 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Retain-and-getting-max-values/m-p/753310#M237400</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2021-07-10T05:13:05Z</dc:date>
    </item>
    <item>
      <title>Re: Retain and getting max values</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Retain-and-getting-max-values/m-p/753319#M237405</link>
      <description>If it’s the first seqno in a by group then first.seqno =1. Otherwise it’s 0. If it’s the last seqno in a group then last.seqno =1. You only wanted 1 row per subject so I did if last.seqno then output.</description>
      <pubDate>Sat, 10 Jul 2021 08:39:16 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Retain-and-getting-max-values/m-p/753319#M237405</guid>
      <dc:creator>tarheel13</dc:creator>
      <dc:date>2021-07-10T08:39:16Z</dc:date>
    </item>
  </channel>
</rss>

