If statement 错误:数组下标超出i+;两年

If statement 错误:数组下标超出i+;两年,if-statement,sas,sas-studio,If Statement,Sas,Sas Studio,我有一个如下所示的数据集: ID 2017 2018 2019 2020 2017 30 24 20 18 2018 30 24 20 18 2019 30 24 20 18 2020 30 24 20 18 我希望根据以下几个输入创建一个数组: %let FixedorFloating = '1 or 0'; %let

我有一个如下所示的数据集:

ID      2017    2018    2019    2020

2017    30      24      20      18
2018    30      24      20      18
2019    30      24      20      18
2020    30      24      20      18
我希望根据以下几个输入创建一个数组:

%let FixedorFloating = '1 or 0';
%let Repricingfrequency = n Years;
%let LastRepricingDate = 'Date'n;
数组条件是,如果ID=Year+2i,则flag=1

e、 g

我的代码目前是,我在I+2年(以红色突出显示)有问题,但I年工作正常

data ReferenceRateContract;
    set refratecontract;

 *arrays for years and flags;
     array _year(2017:2022) year2017-year2022;
     array _flag(2017:2022) flag2017-flag2022;
*环路阵列

if &FixedorFloating=1

    then do i=&dateoflastrepricing to hbound(_year);

    /*check if year matches year in variable name*/

    if put(ID, 4.) = compress(vname(_year(i)),, 'kd') 
        then _flag(i)=1;

    else _flag(i)=0;

end;

else if &fixedorfloating=0

    then do i=&dateoflastrepricing to hbound(_year);

    if put(ID, 4.) = compress(vname(_year(i)),, 'kd') 
        then _flag(i)=1;

    else if put(ID, 4.) = compress(vname(_year(i+2)),, 'kd') 
    then _flag(i)=1;

    else _flag(i)=0;
end;

drop i;
运行

正在寻找一种基于Id=年份+2i、TIA标记的方法

***else if put(ID, 4.) = compress(vname(_year(i+2)),, 'kd') then _flag(i)=1;***

问题是我应该把
I-2
而不是
I+2

此外,当我的hbound试图迭代到矩阵的末尾时,我必须更改数组限制

data referenceratecontract;
set referenceratecontract;
keep flag2017--flag2020;
run;
***else if put(ID, 4.) = compress(vname(_year(i+2)),, 'kd') then _flag(i)=1;***