BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
ajay_mishra
Calcite | Level 5

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
Reeza
Super User

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. 

 

Screen Shot 2018-01-09 at 5.35.08 PM.png

 

 

View solution in original post

11 REPLIES 11
novinosrin
Tourmaline | Level 20

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!

ajay_mishra
Calcite | Level 5

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

HB
Barite | Level 11 HB
Barite | Level 11

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
PaigeMiller
Diamond | Level 26

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
Reeza
Super User

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.


 

 

novinosrin
Tourmaline | Level 20


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;

novinosrin
Tourmaline | Level 20

One more:

 


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

mkeintz
PROC Star

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

--------------------------
Reeza
Super User

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. 

 

Screen Shot 2018-01-09 at 5.35.08 PM.png

 

 

SAS Innovate 2025: Save the Date

 SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!

Save the date!

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

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