Calcite | Level 5

Formula calculation

Hi,

Can anyone help the calculation of Y below using SAS code?

Y=A*(B)-1+ A*(B)-2 + A*(B)-3 + A*(B)-4 +……+ A*(B)-N

Thanks a lot!

11 REPLIES 11
Opal | Level 21

Re: Formula calculation

Within a DATA step, and assuming you have variables A, B, and N:

y=0;

do k=1 to n;

y + a*b**(-k);

end;

If B is actually an expression rather than a variable, put it in parentheses:

y + a*(b)**(-k);

Opal | Level 21

Re: Formula calculation

Or this, which should be faster:

``````    u = 0;
v = 1/b;
do k = 1 to n;
u = (1 + u) * v;
end;
y = a*u;
``````
PG
Calcite | Level 5

Re: Formula calculation

Thanks for you both for providing the answer, much appreciated! PG Stats, since the power is negative, should the sas code be revised?

as  u = 0;
v = 1/b;
do k = -1 to -n; u = (1 + u) * v; end;
y = a*u;

Thanks and regards.

Opal | Level 21

Re: Formula calculation

No. k is only a counter, not the exponent. The exponent comes from the number of multiplications by v (= 1/b, = b**-1), i.e. the negative exponent results from multiplying by a negative power of b.

PG
Calcite | Level 5

Re: Formula calculation

Thanks again, PG Stats!!

Calcite | Level 5

Re: Formula calculation

Thanks! How about if N has one decimal place, e.g. 14.1?

Opal | Level 21

Re: Formula calculation

What is the first term in the equation if N has one decimal place?

Calcite | Level 5

Re: Formula calculation

In the equation, everything is the same, only if N is not an integer, the example is below and I need to calculate for each record (Y1........YN)

Y1=A*(B)-1+ A*(B)-2 + A*(B)-3 + A*(B)-4 +……+ A*(B)-10.2

Y2=A*(B)-1+ A*(B)-2 + A*(B)-3 + A*(B)-4 +……+ A*(B)-20.3

…….

YN=A*(B)-1+ A*(B)-2 + A*(B)-3 + A*(B)-4 +……+ A*(B)-N.5

Opal | Level 21

Re: Formula calculation

Not clear. What is the term before the last?

PG
Calcite | Level 5

Re: Formula calculation

Thanks very much, PG!

the term before the last is: A*(B)-N+1

For example,

Y1=A*(B)-1+ A*(B)-2 + A*(B)-3 + A*(B)-4 +……+ A*(B)-9 +A*(B)-10.2

When I run the above sas code, the decimal 0.2 from the last term is missing.

Calcite | Level 5

Re: Formula calculation

sorry, it is not -N+1, it should be integer -N+1, for example if N is 10.2, then the term before the last one should be A*(B)-9 , not 9.2.

Discussion stats
• 11 replies
• 1018 views
• 2 likes
• 3 in conversation