SAS не набирает обороты

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

data have;
    input repricingdate1-repricingdate3;
    datalines;

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

run;

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

Я хочу создать переменную «Flag», которая возвращает «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;

Буду признателен, если кто-нибудь укажет на мою ошибку, спасибо.

Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
0
0
43
1

Ответы 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. Как вы упомянули, ваш демонстрационный код

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

78282219 12.09.2018 17:20

Я добавил, в чем ваша проблема, но не тестировал, как вы предположили, ваш пример кода работает некорректно. Здесь есть код для создания демонстрационных данных: community.sas.com/t5/SAS-Communities-Library/…

Reeza 12.09.2018 17:34

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