<?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: Flag record with maximum and minimum value with latest date in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Flag-record-with-maximum-and-minimum-value-with-latest-date/m-p/737475#M229927</link>
    <description>&lt;P&gt;I think your methodology would work but it's also overly complex. A sort seems to work just fine and I think it replicates your logic fairly well. Does this work? If not, please explain how in detail with example cases.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;PROC SORT DATA=BOOK3;
BY SUBJECT LABTEST DESCENDING VALUE DESCENDING DATE;
RUN;

DATA FLAG_MAX;
SET BOOK3;
BY SUBJECT LABTEST;
IF FIRST.LABTEST THEN FLAG='Y';
RUN;

PROC SORT DATA=FLAG_MAX;
BY SUBJECT LABTEST DATE;
RUN;

PROC PRINT DATA=FLAG_MAX;
RUN;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;These are the results:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;Obs	Subject	Labtest	value	date	FLAG
1	001	ESR	55	02MAY2021	 
2	001	ESR	4	03MAY2021	 
3	001	ESR	55	04MAY2021	Y
4	001	RBC	15	27APR2021	 
5	001	RBC	12	28APR2021	 
6	001	RBC	15	29APR2021	Y
7	001	WBC	9	30APR2021	 
8	001	WBC	10	01MAY2021	Y&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-SPOILER&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;PROC SORT DATA=BOOK3;
BY SUBJECT LABTEST DESCENDING VALUE DESCENDING DATE;
RUN;

DATA FLAG_MAX;
SET BOOK3;
BY SUBJECT LABTEST;
IF FIRST.LABTEST THEN MAX_FLAG='Y';
RUN;

PROC SORT DATA=FLAG_MAX;
BY SUBJECT LABTEST VALUE DESCENDING DATE;
RUN;

DATA FLAG_MAX_MIN;
SET FLAG_MAX;
BY SUBJECT LABTEST;
IF FIRST.LABTEST THEN MIN_FLAG='Y';
RUN;

PROC SORT DATA=FLAG_MAX_MIN;
BY SUBJECT LABTEST DATE;
RUN;

PROC PRINT DATA=FLAG_MAX_MIN;
RUN;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;/LI-SPOILER&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Wed, 28 Apr 2021 00:15:08 GMT</pubDate>
    <dc:creator>Reeza</dc:creator>
    <dc:date>2021-04-28T00:15:08Z</dc:date>
    <item>
      <title>Flag record with maximum and minimum value with latest date</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Flag-record-with-maximum-and-minimum-value-with-latest-date/m-p/737466#M229923</link>
      <description>&lt;P&gt;I have a data as below and want to flag records with following criteria.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;1. Max and minimum value within each labtest and if there are multiple records then flag record with latest date.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I am able to do that with following algorithm but looking for more efficient method.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;1. get Max and min value with proc sql step&lt;/P&gt;
&lt;P&gt;2. merge data from step 1 with "have" data and if value equals max and min value then flag record as 1.&lt;/P&gt;
&lt;P&gt;3. subset data from above step to get only records with max=1. Then use data step by group processing to choose last.labtest and flag the max record with latest date as&amp;nbsp; Y.&lt;/P&gt;
&lt;P&gt;4. Repeat step 3 for flagging minimum value records.&amp;nbsp;&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;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
DATA WORK.Book3;
    LENGTH
        Subject          $ 3
        Labtest          $ 3
        value              8
        date               8 ;
    FORMAT
        Subject          $CHAR3.
        Labtest          $CHAR3.
        value            BEST12.
        date             DATE9. ;
    INFORMAT
        Subject          $CHAR3.
        Labtest          $CHAR3.
        value            BEST12.
        date             DATE9. ;
    INFILE DATALINES4
        DLM='7F'x
        MISSOVER
        DSD ;
    INPUT
        Subject          : $CHAR3.
        Labtest          : $CHAR3.
        value            : BEST32.
        date             : BEST32. ;
DATALINES4;
001&amp;#127;RBC&amp;#127;15&amp;#127;22397
001&amp;#127;RBC&amp;#127;12&amp;#127;22398
001&amp;#127;RBC&amp;#127;15&amp;#127;22399
001&amp;#127;WBC&amp;#127;9&amp;#127;22400
001&amp;#127;WBC&amp;#127;10&amp;#127;22401
001&amp;#127;ESR&amp;#127;55&amp;#127;22402
001&amp;#127;ESR&amp;#127;4&amp;#127;22403
001&amp;#127;ESR&amp;#127;55&amp;#127;22404
;;;;&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>Tue, 27 Apr 2021 22:39:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Flag-record-with-maximum-and-minimum-value-with-latest-date/m-p/737466#M229923</guid>
      <dc:creator>chetan3125</dc:creator>
      <dc:date>2021-04-27T22:39:26Z</dc:date>
    </item>
    <item>
      <title>Re: Flag record with maximum and minimum value with latest date</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Flag-record-with-maximum-and-minimum-value-with-latest-date/m-p/737473#M229925</link>
      <description>&lt;P&gt;You can obviously do that, but what about using the MINID/MAXID options in PROC SUMMARY?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Examples of both here:&lt;/P&gt;
&lt;P&gt;&lt;A href="https://communities.sas.com/t5/SAS-Programming/Proc-SQL-MINID-equivalent/td-p/311628" target="_blank"&gt;https://communities.sas.com/t5/SAS-Programming/Proc-SQL-MINID-equivalent/td-p/311628&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/282073"&gt;@chetan3125&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;
&lt;P&gt;I have a data as below and want to flag records with following criteria.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;1. Max and minimum value within each labtest and if there are multiple records then flag record with latest date.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I am able to do that with following algorithm but looking for more efficient method.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;1. get Max and min value with proc sql step&lt;/P&gt;
&lt;P&gt;2. merge data from step 1 with "have" data and if value equals max and min value then flag record as 1.&lt;/P&gt;
&lt;P&gt;3. subset data from above step to get only records with max=1. Then use data step by group processing to choose last.labtest and flag the max record with latest date as&amp;nbsp; Y.&lt;/P&gt;
&lt;P&gt;4. Repeat step 3 for flagging minimum value records.&amp;nbsp;&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;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
DATA WORK.Book3;
    LENGTH
        Subject          $ 3
        Labtest          $ 3
        value              8
        date               8 ;
    FORMAT
        Subject          $CHAR3.
        Labtest          $CHAR3.
        value            BEST12.
        date             DATE9. ;
    INFORMAT
        Subject          $CHAR3.
        Labtest          $CHAR3.
        value            BEST12.
        date             DATE9. ;
    INFILE DATALINES4
        DLM='7F'x
        MISSOVER
        DSD ;
    INPUT
        Subject          : $CHAR3.
        Labtest          : $CHAR3.
        value            : BEST32.
        date             : BEST32. ;
DATALINES4;
001&amp;#127;RBC&amp;#127;15&amp;#127;22397
001&amp;#127;RBC&amp;#127;12&amp;#127;22398
001&amp;#127;RBC&amp;#127;15&amp;#127;22399
001&amp;#127;WBC&amp;#127;9&amp;#127;22400
001&amp;#127;WBC&amp;#127;10&amp;#127;22401
001&amp;#127;ESR&amp;#127;55&amp;#127;22402
001&amp;#127;ESR&amp;#127;4&amp;#127;22403
001&amp;#127;ESR&amp;#127;55&amp;#127;22404
;;;;&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;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 27 Apr 2021 23:42:36 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Flag-record-with-maximum-and-minimum-value-with-latest-date/m-p/737473#M229925</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2021-04-27T23:42:36Z</dc:date>
    </item>
    <item>
      <title>Re: Flag record with maximum and minimum value with latest date</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Flag-record-with-maximum-and-minimum-value-with-latest-date/m-p/737475#M229927</link>
      <description>&lt;P&gt;I think your methodology would work but it's also overly complex. A sort seems to work just fine and I think it replicates your logic fairly well. Does this work? If not, please explain how in detail with example cases.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;PROC SORT DATA=BOOK3;
BY SUBJECT LABTEST DESCENDING VALUE DESCENDING DATE;
RUN;

DATA FLAG_MAX;
SET BOOK3;
BY SUBJECT LABTEST;
IF FIRST.LABTEST THEN FLAG='Y';
RUN;

PROC SORT DATA=FLAG_MAX;
BY SUBJECT LABTEST DATE;
RUN;

PROC PRINT DATA=FLAG_MAX;
RUN;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;These are the results:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;Obs	Subject	Labtest	value	date	FLAG
1	001	ESR	55	02MAY2021	 
2	001	ESR	4	03MAY2021	 
3	001	ESR	55	04MAY2021	Y
4	001	RBC	15	27APR2021	 
5	001	RBC	12	28APR2021	 
6	001	RBC	15	29APR2021	Y
7	001	WBC	9	30APR2021	 
8	001	WBC	10	01MAY2021	Y&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-SPOILER&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;PROC SORT DATA=BOOK3;
BY SUBJECT LABTEST DESCENDING VALUE DESCENDING DATE;
RUN;

DATA FLAG_MAX;
SET BOOK3;
BY SUBJECT LABTEST;
IF FIRST.LABTEST THEN MAX_FLAG='Y';
RUN;

PROC SORT DATA=FLAG_MAX;
BY SUBJECT LABTEST VALUE DESCENDING DATE;
RUN;

DATA FLAG_MAX_MIN;
SET FLAG_MAX;
BY SUBJECT LABTEST;
IF FIRST.LABTEST THEN MIN_FLAG='Y';
RUN;

PROC SORT DATA=FLAG_MAX_MIN;
BY SUBJECT LABTEST DATE;
RUN;

PROC PRINT DATA=FLAG_MAX_MIN;
RUN;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;/LI-SPOILER&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 28 Apr 2021 00:15:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Flag-record-with-maximum-and-minimum-value-with-latest-date/m-p/737475#M229927</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2021-04-28T00:15:08Z</dc:date>
    </item>
    <item>
      <title>Re: Flag record with maximum and minimum value with latest date</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Flag-record-with-maximum-and-minimum-value-with-latest-date/m-p/737501#M229943</link>
      <description>&lt;P&gt;Would you please show us the expected result from your (very nicely posted) example dataset?&lt;/P&gt;</description>
      <pubDate>Wed, 28 Apr 2021 07:17:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Flag-record-with-maximum-and-minimum-value-with-latest-date/m-p/737501#M229943</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2021-04-28T07:17:22Z</dc:date>
    </item>
    <item>
      <title>Re: Flag record with maximum and minimum value with latest date</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Flag-record-with-maximum-and-minimum-value-with-latest-date/m-p/737570#M229962</link>
      <description>&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="image.png" style="width: 522px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/58770i5F09CCDEB4E6AD22/image-size/large?v=v2&amp;amp;px=999" role="button" title="image.png" alt="image.png" /&gt;&lt;/span&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 28 Apr 2021 13:29:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Flag-record-with-maximum-and-minimum-value-with-latest-date/m-p/737570#M229962</guid>
      <dc:creator>chetan3125</dc:creator>
      <dc:date>2021-04-28T13:29:27Z</dc:date>
    </item>
    <item>
      <title>Re: Flag record with maximum and minimum value with latest date</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Flag-record-with-maximum-and-minimum-value-with-latest-date/m-p/737581#M229970</link>
      <description>Seems to match my results exactly....</description>
      <pubDate>Wed, 28 Apr 2021 14:05:04 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Flag-record-with-maximum-and-minimum-value-with-latest-date/m-p/737581#M229970</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2021-04-28T14:05:04Z</dc:date>
    </item>
  </channel>
</rss>

