This may give a place to get started. I am only using 4 pre/post values so it is easy to see.
data example;
input Pre_1 - Pre_4 Post_1-Post_4;
array pre Pre_: ;
array post Post_:;
array cost_(4);
do i = 1 to ( n(of post(*)) );
cost_[i] = post[i] - pre[i];
end;
datalines;
10 20 30 40 20 35 46 70
10 20 30 40 40 20 . .
;
run;
the N(of post(*)) gets the number of elements not missing in the Post array. Assumption is that these are sequential for post month1 to n with no gaps.
You can use basically any function that returns a non-0 positive integer for a simple array index.
So post[Mod(i,4)] would attempt to use the mod 4 of the loop counter as the index. Problem: mod(4,4) is 0 and would cause problems so you would need to check before actually using it with the array.
I use the [] for array index to make it easier to see the difference between the function calls and index definition boundary. Array references could use either the () or [].
With the different break points you would probably do an initial test of the n(of post(*)) and branch accordingly for your boundaries.
... View more