Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 循环和输出_Arrays_Loops_Sas_Do Loops_Sas Studio - Fatal编程技术网

Arrays 循环和输出

Arrays 循环和输出,arrays,loops,sas,do-loops,sas-studio,Arrays,Loops,Sas,Do Loops,Sas Studio,我正在尝试使用我的循环和输出语句,目前我有一笔分期偿还的贷款,如下所示: data have; input Payment2017 Payment2018 Payment2019 Payment2020; datalines; 100 10 10 10; run; 我试图创建一个成熟度和重新发行的概要文件,如下所示,我将在提交当前代码时解释其逻辑: data want; input; P2017 P2018 P2019 P2020 F1 F2 F3 MP2017 MP2018 MP2019

我正在尝试使用我的循环和输出语句,目前我有一笔分期偿还的贷款,如下所示:

data have;
input Payment2017 Payment2018 Payment2019 Payment2020;
datalines;

100 10 10 10;

run;
我试图创建一个成熟度和重新发行的概要文件,如下所示,我将在提交当前代码时解释其逻辑:

data want;
input;
P2017 P2018 P2019 P2020 F1 F2 F3 MP2017 MP2018 MP2019 MP2020 NI2017 NI2018 NI2019 NI2020;
datalines;

100 10 10 10 0.1 0.1 0.1 100 10 10 10 0 0 0 0
100 10 10 10 0.1 0.1 0.1 0 10 1 1 0 10 0 0
100 10 10 10 0.1 0.1 0.1 0 0 11 1.1 0 0 11 0
100 10 10 10 0.1 0.1 0.1 0 0 0 12.1 0 0 0 12.1
;
run;
因此,逻辑是:

Payment2017=年初余额 Payment2018-2020=每个时期支付的金额 F1-F3是每个期间支付的贷款的分数

MP2017-MP2020是偿还的贷款金额-本质上是

mp(i) = p(i) *f(i) 
NI2017-NI2020是新发行的金额,如果您假设每次我还清一部分贷款时,都会将其添加回贷款中。所以我现在使用的代码看起来像这样,但是我在输出和循环方面有一些问题

        data want;
        set have;

        array MaturityProfile(4) MaturityProfile&StartDate-MaturityProfile&EndDate;  
        array NewIssuance(4) NewIssuance&StartDate - NewIssuance&EndDate;
        array p(4) payment&StartDate-payment&EndDate;
        array fraction(3); * track constant fraction determined at start of profile;

            MaturityProfile(1) = P(1);

            do i = 1 to 3;

            fraction(i) = p(i+1) / p(1);

            end;

            iter=2;
            do j = 1 to 2;
            do i = iter to 4;

            MaturityProfile(i) = P(j) * Fraction(i-j);
            newissuance(i) = MaturityProfile(i);
            end;
            output;
            iter=iter+1;
            end;
            output;

            *MaturityProfile(4) = ( P(3) + MaturityProfile(2) ) * Fraction(1);


            *output;

            drop i;
            drop j;
            drop iter;

            run;
我试图找到一种方法来计算前两行,保持它当前的输出方式,但第三行需要第二行(或newissuance2019)的列总和,然后将其乘以分数1

因此,基本上,输出看起来像我放在数据需要步骤中的表


蒂亚

我通过以下方法解决了这个问题:

data want;
    set have;

    array MaturityProfile(4) MaturityProfile&StartDate-MaturityProfile&EndDate;  
    array NewIssuance(4) NewIssuance&StartDate - NewIssuance&EndDate;
    array p(4) payment&StartDate-payment&EndDate;
    array fraction(3); * track constant fraction determined at start of profile;
    array Total(4) Total1-Total4;

        MaturityProfile(1) = P(1);

        do i = 1 to 3;

        fraction(i) = p(i+1) / p(1);

        end;

        iter=2;
        do j = 1 to 2;
        do i = iter to 4;

        MaturityProfile(i) = P(j) * Fraction(i-j);
        Total(i)=MaturityProfile(i) + P(i);
        end;
        output;
        iter=iter+1;
        end;

        MaturityProfile(4) = Total(3) * Fraction(1);


        output;

        drop i;
        drop j;
        drop iter;

        run;