<?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: Calculate min and max values using Proc SQL in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Calculate-min-and-max-values-using-Proc-SQL/m-p/659627#M197569</link>
    <description>&lt;P&gt;If you don't insist on using proc sql, two simple data-steps and a proc transpose create what you want.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want1;
   set have;

   min_rate = min(of Rate:);
   max_rate = max(of Rate:);

   drop Rate:;
run;


proc transpose data=have out=transposed;
   var Rate:;
run;

data want2;
   set transposed(drop=_name_);
   
   Rate_No = _n_;
   min_rate = min(of Col:);
   max_rate = max(of Col:);

   drop Col:;
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Tue, 16 Jun 2020 06:45:12 GMT</pubDate>
    <dc:creator>andreas_lds</dc:creator>
    <dc:date>2020-06-16T06:45:12Z</dc:date>
    <item>
      <title>Calculate min and max values using Proc SQL</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculate-min-and-max-values-using-Proc-SQL/m-p/659587#M197556</link>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Hi everyone.&lt;/P&gt;
&lt;P&gt;I have a table below.&lt;/P&gt;
&lt;TABLE class="lia-align-center" style="width: 50%;" border="1" width="50%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="16.666666666666668%"&gt;Patient_no&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;Rate_1&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;Rate_2&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;Rate_3&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;Rate_4&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;Rate_5&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="16.666666666666668%"&gt;1&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="16.666666666666668%"&gt;2&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="16.666666666666668%"&gt;3&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="16.666666666666668%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;4&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;From the table, I would like to create tables showing the minimum and maximum values for each patient and for each rate.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The tables would look like these:&lt;/P&gt;
&lt;TABLE class="lia-align-center" style="width: 30%;" border="1" width="30%"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="33.333333333333336%"&gt;Patient_no&lt;/TD&gt;
&lt;TD width="33.333333333333336%"&gt;min_rate&lt;/TD&gt;
&lt;TD width="33.333333333333336%"&gt;max_rate&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="33.333333333333336%"&gt;1&lt;/TD&gt;
&lt;TD width="33.333333333333336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="33.333333333333336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="33.333333333333336%"&gt;2&lt;/TD&gt;
&lt;TD width="33.333333333333336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="33.333333333333336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="33.333333333333336%"&gt;3&lt;/TD&gt;
&lt;TD width="33.333333333333336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="33.333333333333336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="33.333333333333336%"&gt;4&lt;/TD&gt;
&lt;TD width="33.333333333333336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="33.333333333333336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;TABLE class="lia-align-center" border="1"&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD width="33.333333333333336%"&gt;Rate_no&lt;/TD&gt;
&lt;TD width="33.333333333333336%"&gt;min_rate&lt;/TD&gt;
&lt;TD width="33.333333333333336%"&gt;max_rate&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="33.333333333333336%"&gt;1&lt;/TD&gt;
&lt;TD width="33.333333333333336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="33.333333333333336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="33.333333333333336%"&gt;2&lt;/TD&gt;
&lt;TD width="33.333333333333336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="33.333333333333336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="33.333333333333336%"&gt;3&lt;/TD&gt;
&lt;TD width="33.333333333333336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="33.333333333333336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD width="33.333333333333336%"&gt;4&lt;/TD&gt;
&lt;TD width="33.333333333333336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD width="33.333333333333336%"&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;TR&gt;
&lt;TD&gt;5&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;
&lt;/TR&gt;
&lt;/TBODY&gt;
&lt;/TABLE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thank you. Greatly appreciated!&lt;/P&gt;</description>
      <pubDate>Tue, 16 Jun 2020 03:54:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculate-min-and-max-values-using-Proc-SQL/m-p/659587#M197556</guid>
      <dc:creator>yoyong555</dc:creator>
      <dc:date>2020-06-16T03:54:21Z</dc:date>
    </item>
    <item>
      <title>Re: Calculate min and max values using Proc SQL</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculate-min-and-max-values-using-Proc-SQL/m-p/659606#M197558</link>
      <description>&lt;P&gt;what's the difference between the 2 output tables?&lt;/P&gt;</description>
      <pubDate>Tue, 16 Jun 2020 04:25:46 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculate-min-and-max-values-using-Proc-SQL/m-p/659606#M197558</guid>
      <dc:creator>ChrisNZ</dc:creator>
      <dc:date>2020-06-16T04:25:46Z</dc:date>
    </item>
    <item>
      <title>Re: Calculate min and max values using Proc SQL</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculate-min-and-max-values-using-Proc-SQL/m-p/659611#M197561</link>
      <description>&lt;P&gt;First, transpose your dataset to a usable layout:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc transpose
  data=wide
  out=trans (rename=(col1=rate))
;
by patient_no;
var rate:;
run;

data long;
set trans;
rate_no = input(scan(_name_,2,'_'),best.);
drop _name_;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Then, your 2 queries become very simple:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql;
create table want1 as
  select
    patient_no,
    min(rate) as min_rate,
    max(rate) as max_rate
  from long
  group by patient_no
;
create table want2 as
  select
    rate_no,
    min(rate) as min_rate,
    max(rate) as max_rate
  from long
  group by rate_no
;
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Note: a long dataset layout is always better suited for analysis. See Maxim 19.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT size="2"&gt;&lt;EM&gt;Edit: changed the summary functions from sum to min and max.&lt;/EM&gt;&lt;/FONT&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 17 Jun 2020 06:09:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculate-min-and-max-values-using-Proc-SQL/m-p/659611#M197561</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2020-06-17T06:09:34Z</dc:date>
    </item>
    <item>
      <title>Re: Calculate min and max values using Proc SQL</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculate-min-and-max-values-using-Proc-SQL/m-p/659627#M197569</link>
      <description>&lt;P&gt;If you don't insist on using proc sql, two simple data-steps and a proc transpose create what you want.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want1;
   set have;

   min_rate = min(of Rate:);
   max_rate = max(of Rate:);

   drop Rate:;
run;


proc transpose data=have out=transposed;
   var Rate:;
run;

data want2;
   set transposed(drop=_name_);
   
   Rate_No = _n_;
   min_rate = min(of Col:);
   max_rate = max(of Col:);

   drop Col:;
run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 16 Jun 2020 06:45:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculate-min-and-max-values-using-Proc-SQL/m-p/659627#M197569</guid>
      <dc:creator>andreas_lds</dc:creator>
      <dc:date>2020-06-16T06:45:12Z</dc:date>
    </item>
    <item>
      <title>Re: Calculate min and max values using Proc SQL</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculate-min-and-max-values-using-Proc-SQL/m-p/659635#M197571</link>
      <description>&lt;P&gt;Inspired by the dataset "long" - see the answer from &lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/11562"&gt;@Kurt_Bremser&lt;/a&gt; - you could use proc summary twice, imho the proc performs much better than SQL on larger datasets.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc summary data=long nway;
   class Patient_no;
   var Rate;
   output out=want1(drop= _:) min=min_rate max=max_rate;
run;

proc summary data=long nway;
   class Rate_no;
   var Rate;
   output out=want2(drop= _:) min=min_rate max=max_rate;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 16 Jun 2020 07:03:51 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculate-min-and-max-values-using-Proc-SQL/m-p/659635#M197571</guid>
      <dc:creator>andreas_lds</dc:creator>
      <dc:date>2020-06-16T07:03:51Z</dc:date>
    </item>
  </channel>
</rss>

