data result;
set ads;
n=1;
do i=_n_+2 to count;
n=n+1;
set a(keep=date income2 vol rename=(date=date_lag income2=income2_lag vol=vol_lag)) nobs=count point=i;
if vol_lag^=0 then leave;
end;
select;
when (n=2) syl=income2_lag/income1-1-rate*(date_lag-date)/100;
when (n>2) syl=income2_lag/income1-rate*(date_lag-date)/36500;
otherwise;
end;
drop n date_lag income2_lag vol_lag;
run;
proc iml;
use ads;
read all into A[colname={'date','income1','income2','vol','rate'}];
close ads;
S=J(nrow(A),1,.);
do i=1 to nrow(A);
N=1;
do j=i+2 to nrow(A);
N=N+1;
if A[j,4]^=0 & N>=2 then do;
if N=2 then do;C=1;D=100;end;else do;C=0;D=36500;end;
S[i]=A[j,3]/A[i,2]-C-A[i,5]#(A[j,1]-A[i,1])/D;
goto exit;
end;
end;
exit:;
end;
R=A||S;
create result var {'date','income1','income2','vol','rate','syl'};
append from R;
quit;