BookmarkSubscribeRSS Feed
89974114
Quartz | Level 8

I am calculating a fraction based on the payments made in four years and I wish to put a cap on my fraction such that it can only be between -1 and 1. Subsequently I'd like to make the following fractions 0 if the cap is maxxed out - an example would be:

data want;
input payment1 payment2 payment3 payment4 fraction1 fraction2 fraction3;
datalines;
100 25 25 25 0.25 0.25 0.25
150 50 50 50 0.33 0.33 0.33
50 10 10 10 0.2 0.2 0.2
10 50 60 70 1 0 0
;
run;

I've been looking at the ceiling function with the following code

data want2;
set want;

array fraction(3) fraction1 - fraction3;
array payment(4) payment1 - payment4;

do i = 2 to 4;

fraction(i-1) = payment(i)/payment(1);

end;
run;

data want3;
set want2;
array fraction(3) fraction1 - fraction3;
array fract(3) fract1-fract3;

do i = 1 to 3;

fract = ceil (fraction,1); 

end;
drop i;

run;

but I am getting this error

ERROR 72-185: The CEIL function call has too many arguments.

So in all i'm looking for a way to calculate the fraction of the payments and then make a ceiling at one, then once the ceiling is hit, the subsequent fractions must be zero (which could be done I suppose by just doing an IF-THEN)

2 REPLIES 2
Criptic
Lapis Lazuli | Level 10
The ceil function rounds up that is it.
I would suggest to just use an if-statement.
Astounding
PROC Star

Switching from CEIL to MIN seems like it would do what you are asking.

hackathon24-white-horiz.png

The 2025 SAS Hackathon has begun!

It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.

Latest Updates

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
  • 2 replies
  • 1800 views
  • 4 likes
  • 3 in conversation