SAS не набирает лет - PullRequest
       37

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

0 голосов
/ 12 сентября 2018

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

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 для обеих строк и т. Д.on.

Я использую приведенный ниже код и не вижу, в чем заключается моя ошибка, он даже собирает пару строк в большом наборе данных, но является спорадическим

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 голосов
/ 12 сентября 2018

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

EDIT: Ваша ошибка здесь: put(repricingdate(j), 4.) -> Это не генерирует значение года. Если вы хотите год, используйте вместо этого функцию ГОД year(repricingdate(j))

Предполагается, что ваши даты на самом деле являются датами SAS. Как вы упомянули, ваш демонстрационный код

...