The MAX and MIN functions allow you to easily identify the maximum and minimum values from a selection of variables. However in order to find the second highest value or the bottom 3 values you will need to make use of the SAS 9 functions LARGEST and SMALLEST.
The following examples are based on the data listed below:
data balances;
input custid $ bal1 bal2 bal3 bal4 bal5 bal6;
datalines;
12345 911.00 863.30 896.98 1672.26 1675.20 602.42
12346 62.27 10.28 1377.79 1683.42 1290.92 553.13
12347 1996.54 74.68 253.94 374.02 691.90 593.75
12348 1494.83 1114.74 332.76 505.95 . 963.98
12349 336.61 295.78 .a 1965.40 592.76 .b
;
run;
Maximum and Minimum
The syntax for the maximum and minimum functions is as follows.
function(list of variables);
Largest and Smallest
The largest and smallest functions have similar syntax.
function(value, list);
Where value is the nth item you want (e.g. 2 for the second largest/smallest) and
list is a list of variables that will be processed.
The following code demonstrates the use of the MAX, MIN, LARGEST and SMALLEST functions.
data balances2;
set balances;
maxbal=max(of bal1-bal6);
minbal=min(of bal1-bal6);
large1=largest(1,of bal1-bal6);
large2=largest(2,of bal1-bal6);
small1=smallest(1,of bal1-bal6);
small2=smallest(2,of bal1-bal6);
small3=smallest(3,of bal1-bal6);
drop bal:;
run;
The following results are produced:
Max, Min, Smallest and Largest Functions
maxbal minbal large1 large2
1675.20 602.42 1675.20 1672.26
1683.42 10.28 1683.42 1377.79
1996.54 74.68 1996.54 691.90
1494.83 332.76 1494.83 1114.74
1965.40 295.78 1965.40 592.76
Max, Min, Smallest and Largest Functions
small1 small2 small3
602.42 863.30 896.98
10.28 62.27 553.13
74.68 253.94 374.02
332.76 505.95 963.98
295.78 336.61 592.76
Note that where the first argument in the largest and smallest functions is set to '1', the result is the same as the max and min functions. Also note that in this example when evaluating the minimum, the missing values have been ignored.
Handling of missing values
The max and min functions completely exclude missing data from the evaluation however the LARGEST and SMALLEST functions handle missing values in the data by placing any missing values present at the end of the sorted list of variables.
So the LARGEST function will return the maximum data value where a '1' is specified in the first argument, the second largest for a '2' and so on. Once all of the non missing data is referenced the missing values will be returned.
The SMALLEST function will return the lowest value when '1' is specified the second lowest for a '2' and so on. Again once all the non missing values have been referenced the missing values will be returned. The last non missing value in this case will be the highest data value.
The following example demonstrates how the largest and smallest functions deal with missing data values.
data balances3;
set balances;
large1=largest(1,of bal1-bal6);
large6=largest(6,of bal1-bal6);
small1=smallest(1,of bal1-bal6);
small6=smallest(6,of bal1-bal6);
drop bal:;
run;
Generates the following data:
Missing Values with the LARGEST and SMALLEST Functions
large1 large6 small1 small6
1675.20 602.42 602.42 1675.20
1683.42 10.28 10.28 1683.42
1996.54 74.68 74.68 1996.54
1494.83 . 332.76 .
1965.40 . 295.78 .