SAS年复一年

时间:2018-09-12 06:19:57

标签: arrays sas do-loops sas-studio

我正在使用以下数据集

data have;
    input repricingdate1-repricingdate3;
    datalines;

    '30SEP2019'd '31DEC2020'd '31MAR2022'd
    '31DEC2020'd '30JUN2023'd '31DEC2025'd
    ;

run;

请问如果这不是输入日期的正确方法,我不确定,但是我有一个使用intnx函数使用这些值的表

我正在寻找创建一个变量“ Flag”,如果重新定价日期与Flag Year相匹配,则该变量将返回'1',即第一行Flag(2019)= 1,两行Flag(2020)= 1,依此类推。

我正在使用下面的代码,看不到我的错误所在,它甚至在较大的数据集中拾取了几行,但是是偶发的

data want;
    set have;

    array flag(2018:2021) flag2018-flag2021;
    array repricingdate(1:3);

    do i = 2018 to 2021;

        do j = 1 to 3;
            if put(repricingdate(j), 4.) = compress(vname(flag(i)),, 'kd') 
            then flag(i)=1;
        end;
    end;

    drop i;

run;

如果有人能指出我的错误,我将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:0)

我不知道您的错误在哪里,但是您可以通过查找年份并将其设置为1而不是循环遍历,来大大简化这一过程。

data want;
    set have;

    array flag(2018:2021) flag2018-flag2021;
    array _date(1:3);

        *set all to 0 initially;
        do i=lbound(flag) to hbound(flag);
                flag(i)=0;
        end;

        do i = 1 to 3;
            year_data=year(_date(i));
            flag(year)=1;
        end;


    drop i;

run;

编辑: 您的错误在这里:  put(repricingdate(j), 4.)->这不会产生年份值。 如果要年份,请使用YEAR函数     year(repricingdate(j))

这假设您的日期实际上是SAS日期。如前所述,您的演示代码