| 
 | 
5#
 
 
 楼主 |
发表于 2012-7-6 14:33:35
|
只看该作者
 
 
 
Re: 求助——挑战
[code:1h1ctds7] 
data ads; 
input date date10. income1 income2 vol rate; 
cards; 
01jan2012 99   100  200 3 
02jan2012 98.1 99.9 100 3 
04jan2012 98.3 99.5 0   3 
05jan2012 98.5 99.1 0   3 
06jan2012 99.7 98.1 4   3 
06jan2012 99.7 98.1 5   3 
08jan2012 99.7 98.1 6   3 
15jan2012 99.7 98.1 7   3 
26jan2012 99.7 98.1 8   3 
; 
run; 
 
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; 
 
[/code:1h1ctds7] |   
 
 
 
 |