SAS Programming

DATA Step, Macro, Functions and more
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-white.png

Special offer for SAS Communities members

Save $250 on SAS Innovate and get a free advance copy of the new SAS For Dummies book! Use the code "SASforDummies" to register. Don't miss out, May 6-9, in Orlando, Florida.

 

View the full agenda.

Register now!

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
  • 13743 views
  • 5 likes
  • 7 in conversation