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

Solved
Occasional Contributor
Posts: 6

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.

Accepted Solutions
Solution
‎01-15-2018 04:27 AM
Super User
Posts: 23,323

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.

All Replies
PROC Star
Posts: 1,592

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!

Occasional Contributor
Posts: 6

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.

Super Contributor
Posts: 266

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
Posts: 13,338

Posts: 2,833

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
Posts: 23,323

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

[ Edited ]

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.

Occasional Contributor
Posts: 6

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.

PROC Star
Posts: 1,592

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

[ Edited ]

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;

PROC Star
Posts: 1,592

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;

Posts: 1,312

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;``````
Solution
‎01-15-2018 04:27 AM
Super User
Posts: 23,323

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.

☑ This topic is solved.