Calcite | Level 5

## How to find the maximum value in a variable through data steps without using loop, min and max fun.

data have;
input Name \$ Age;
cards;
Jack 10
Joe 31
Tom 22
Roe 33
Rex 44
Tim 24
;

How to find the maximum value of AGE variable through data steps without using loop, min and max function.

1 ACCEPTED SOLUTION

Accepted Solutions
Super User

## Re: How to find the maximum value in a variable through data steps without using loop, min and max f

This is a commonly asked question when learning to program so it's within the realm of 'semi-decent' questions. It teaches you how information is carried across rows, conditional logic and how to identify the end of a file. There are automated ways, but often these basics are ignored. I suspect this is the answer your professor is looking for, since it's the most basic solution I can think of, besides the PROC SORT method.

Using the test data from @novinosrin, the approach outlined below works well. It matches his answer with the IFN so that's another viable option as well.

11 REPLIES 11
Tourmaline | Level 20

## Re: How to find the maximum value in a variable through data steps without using loop, min and max f

You want to have "FUN" here? Hmm, I would like to learn from you. Do you know how to do it? If yes, please share. Thank you!

Calcite | Level 5

## Re: How to find the maximum value in a variable through data steps without using loop, min and max f

Actually, you interpret it wrong. Not using the inbuilt function max, min and loop.

Barite | Level 11

## Re: How to find the maximum value in a variable through data steps without using loop, min and max f

Why?

``````data have;
input Name \$ Age;
cards;
Jack 10
Joe 31
Tom 22
Roe 33
Rex 44
Tim 24
;

proc sort;
by descending age;
run;

data maxage;
set have (obs= 1);
drop name;
run;
``````

 The SAS System Age 44
Super User

## Re: How to find the maximum value in a variable through data steps without using loop, min and max f

Diamond | Level 26

## Re: How to find the maximum value in a variable through data steps without using loop, min and max f

Why avoid built-in procedures to do this? It makes no sense. It makes your life more difficult. A pointless restriction.

Unless it's a homework assignment, in which case you need to try it yourself, and ask questions when you get stuck. But it still makes no sense to do it this way.

--
Paige Miller
Super User

## Re: How to find the maximum value in a variable through data steps without using loop, min and max f

Does > and < logic count as max/min functions? Technically they're operators. And technically, the min/max function in a data step will not give you the min/max of a column without other logic.

@ajay_mishra wrote:

data have;
input Name \$ Age;
cards;
Jack 10
Joe 31
Tom 22
Roe 33
Rex 44
Tim 24
;

How to find the maximum value of AGE variable through data steps without using loop, min and max function.

Calcite | Level 5

## Re: How to find the maximum value in a variable through data steps without using loop, min and max f

No. It will act as an operator.

Tourmaline | Level 20

## Re: How to find the maximum value in a variable through data steps without using loop, min and max f

data test;
input Name \$ Age;
cards;
Jack 10
Joe 31
Tom 22
Roe 33
Rex 44
Tim 24
;

proc transpose data=test out=w;
var age;
run;

data wantt;
set w;
array c(*) col:;
call sortn(of c: );
keep col6;
run;

data wantt2;
set test end=last;
array a(100) _temporary_;
retain a;
a(_n_)=age;
if last then do; call sortn(of a(*));max=a(dim(a));output;end;
keep max;
run;

Tourmaline | Level 20

## Re: How to find the maximum value in a variable through data steps without using loop, min and max f

One more:

data wantt3;
set test end=last;
retain max;
max=ifn(Age>max,age, max);
if last;
keep max;
run;

PROC Star

## Re: How to find the maximum value in a variable through data steps without using loop, min and max f

I doubt if your class has gotten to hash objects, so here's a solution I'm sure is not contemplated by your instructor, but which satisfies the criteria.  I don't recommend submitting it:

``````data have;
input Name \$ Age;
cards;
Jack 10
Joe 31
Tom 22
Roe 33
Rex 44
Tim 24
run;

data want;
if 0 then set have;

declare hash h (dataset:"have",ordered:'D');
h.definekey('age');
h.definedata(all:'Y');
h.definedone();
declare hiter ih ('h');

ih.first();
run;``````
--------------------------
The hash OUTPUT method will overwrite a SAS data set, but not append. That can be costly. Consider voting for Add a HASH object method which would append a hash object to an existing SAS data set

Would enabling PROC SORT to simultaneously output multiple datasets be useful? Then vote for
Allow PROC SORT to output multiple datasets

--------------------------
Super User

## Re: How to find the maximum value in a variable through data steps without using loop, min and max f

This is a commonly asked question when learning to program so it's within the realm of 'semi-decent' questions. It teaches you how information is carried across rows, conditional logic and how to identify the end of a file. There are automated ways, but often these basics are ignored. I suspect this is the answer your professor is looking for, since it's the most basic solution I can think of, besides the PROC SORT method.

Using the test data from @novinosrin, the approach outlined below works well. It matches his answer with the IFN so that's another viable option as well.

Discussion stats
• 11 replies
• 12220 views
• 5 likes
• 7 in conversation