BookmarkSubscribeRSS Feed
desireatem
Pyrite | Level 9

S(t)     X_i

.91        1

.85        2

.76       3

.61       4

.55      5

How to I compute this from data above.?

Z=SUM(S(X_i)-S_i+1)*(X_i+1 - X_i)

Z=(0.91-0.85)(2-1)  +  (0.85-0.76)(3-2) + (0.76-0.61)(4-3) + (0.61-0.55)(5-4)

Z=SUM[(S(X_i)-S_i+1) * (X_i+1 - X_i)]

Please in case of simulations

In a general setting such that;

For Example how do I used the code above for this case that I simulate;

Data test;

Do i=1 to 100;

S(t)=ranexp(0)/3;

X_i= ranexp(0)/2;

Output;

End;

Thanks

1 REPLY 1
Vince28_Statcan
Quartz | Level 8

Since this is the IML subforum, lets assume your data is stored in a matrix named SDATA.

Z=0;

do i=1 to (nrow(SDATA)-1);

     Z=Z+(SDATA[i,1]-SDATA[i+1,1])*(SDATA[i+1,2]-[SDATA[i,2]);

end;

print Z;

a more efficient way would probably be to use 4 temporary matrices of dimension (nrow(SDATA)-1)  and define them like X1=SDATA[1:nrow(SDATA)-1,2], X2=SDATA[2:nrow(SDATA), 2] etc. and use term by term multiplication operator which I forgot on the top of my head as it's been a while since I've used IML. More memory usage but fewer operations.

if you want to do this in regular SAS, look for lag<n> function, in your case lag1 function.


Vincent

sas-innovate-white.png

Register Today!

Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9.

 

Early bird rate extended! Save $200 when you sign up by March 31.

Register now!

From The DO Loop
Want more? Visit our blog for more articles like these.
Discussion stats
  • 1 reply
  • 1021 views
  • 0 likes
  • 2 in conversation