Solved
New Contributor
Posts: 3

# getting max and min value by group

Hi everyone,

I have the following data:

Company ID | Year | Quarter | EPS | EPSRank

I would like to create a new variable which is the difference between the max(EPSRank) and min(EPSRank) for each year. Can anyone help with this? Thanks in advance.

Henry

Accepted Solutions
Solution
‎01-13-2017 05:29 AM
Frequent Contributor
Posts: 142

## Re: getting max and min value by group

Hi Henry,

Hope you are looking for difference bewteen max and min of EPSRank across all companies by year. If that case try the below one.

data sample;

input Company_ID Year Quarter \$2. EPS EPSRank;

cards;

101 2010 Q1 10000 100

101 2010 Q2 20000 90

101 2010 Q4 30000 50

102 2016 Q1 60000 20

102 2016 Q3 40000 30

102 2016 Q4 80000 10

;

run;

proc sort data= sample;

by Year ;

run;

proc sql;

create table required as

select * ,(max(EPSRank)-min(EPSRank)) as diffRank

from sample

group by year;

quit;

All Replies
Super User
Posts: 23,763

## Re: getting max and min value by group

This is known as the range.

You can use PROC means/univariate or Summary.

Here is an example with proc means -  a dataset is created with the values in addition to the output displayed.

Proc means data=have  nway;

by year;

output out=yearly_eps_range range(epsRank) = r_epsRank min= min_epsRank max= max_epsRank;

run;

Super User
Posts: 10,278

## Re: getting max and min value by group

``````proc sql;
create table want as
select
company_id, year,
(max(epsrank) - min(epsrank)) as epsdiff
from have
group by company_id, year
;
quit;``````
---------------------------------------------------------------------------------------------
Maxims of Maximally Efficient SAS Programmers
How to convert datasets to data steps
How to post code
Solution
‎01-13-2017 05:29 AM
Frequent Contributor
Posts: 142

## Re: getting max and min value by group

Hi Henry,

Hope you are looking for difference bewteen max and min of EPSRank across all companies by year. If that case try the below one.

data sample;

input Company_ID Year Quarter \$2. EPS EPSRank;

cards;

101 2010 Q1 10000 100

101 2010 Q2 20000 90

101 2010 Q4 30000 50

102 2016 Q1 60000 20

102 2016 Q3 40000 30

102 2016 Q4 80000 10

;

run;

proc sort data= sample;

by Year ;

run;

proc sql;

create table required as

select * ,(max(EPSRank)-min(EPSRank)) as diffRank

from sample

group by year;

quit;

Frequent Contributor
Posts: 142

## Re: getting max and min value by group

Here Proc sort is not required...!! forgot

☑ This topic is solved.