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.

SAS Innovate 2025: Register Now

Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
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
  • 2 replies
  • 1307 views
  • 4 likes
  • 3 in conversation