SAS DO LOOP с конкретными датами

Я хочу создать набор данных, в котором я хочу сохранить только 5 конкретных дат. Итак, моя &дата — 31 марта 2020 года, а &конечная дата — 31 марта 2025 года, и я хочу сохранить только 31 марта каждый год до 2025 года.

С моим кодом ниже он создает даты каждый день до 31 марта 2025 года, и это слишком много, поэтому я хочу сохранить только 5 конкретных дат.

Как я могу это сделать?

Спасибо

  DATA LOOP;FORMAT ROLL_BASE_DT DATE9.;DO  ROLL_BASE_DT =&DATE TO &ENDdate;OUTPUT;END;RUN;

enter code here

enter code here

person Mikael Holmkvist    schedule 22.04.2020    source источник


Ответы (2)


Вы можете использовать запятые в операторе DO для перечисления нескольких значений.

do date='31mar2021'd,'31mar2022'd,'31mar2023'd,'31mar2024'd,'31mar2025'd;
  ...
end;

Вместо этого вы можете перебрать значение YEAR.

do year=2021 to 2025;
   date=mdy(3,31,year);
  ...
end;

Вы можете использовать INTNX() для увеличения даты на ГОД. Вы можете использовать INTCK(), чтобы выяснить, сколько раз нужно запустить цикл.

do index=0 to intck('year',&DATE,&ENDdate);
  date=intnx('year',&date,index,'s');
  ...
end;
person Tom    schedule 22.04.2020

Если вам нужны только 5 дат, вы можете использовать ввод карточек (я знаю об этом, но никогда не использовал его лично).

В качестве альтернативы, вместо использования цикла, просто устанавливайте значения по отдельности с помощью ключевого слова output после каждой установки значения. Это должно сработать.

person Laebrye    schedule 22.04.2020