SAS не набирает лет

Я работаю со следующим набором данных

data have;
    input repricingdate1-repricingdate3;
    datalines;

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

run;

извините, если это неправильный способ ввода дат, я не уверен, но у меня есть таблица с этими значениями, используя функцию intnx

Я пытаюсь создать переменную "Флаг", которая возвращает "1", если дата переоценки совпадает с годом флага, т. Е. Флаг (2019)=1 для первой строки, Флаг (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 ответ

Я не знаю, где ваша ошибка, но вы можете существенно упростить это, найдя год и просто установив их на 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(repricingdate(j))

Это предполагает, что ваши даты на самом деле SAS даты. Как вы уже упоминали, ваш демо-код

Другие вопросы по тегам