Даты и интервалы в САС - PullRequest
       8

Даты и интервалы в САС

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

Если у меня есть две даты, например С 22MAR2005 по 01MAR2006, и я хочу создать интервалы сезона (весна, лето, осень, зима) на основе этого интервала, как это можно сделать на шаге данных?

Сезоны определяются как: Весна: с марта по май Лето: с июня по август Осень: с сентября по ноябрь Зима: с декабря по февраль

Мне нужно посчитать, сколько времени они провели в каждом сезоне.

1 Ответ

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

Вам нужно сначала преобразовать это значение в МЕСЯЦ, а затем в СЕЗОН. Этот точный вопрос был задан недавно, поэтому его довольно легко найти с помощью поиска (я предполагаю, что какой-то курс использует это в качестве домашней работы?).

 data want;
   set have;

   *create month;
    month_date = month(date);

   *assign to season;
   if month_date in (6, 7, 8) then season = 'Summer';
   else if month_date in (9, 10, 11) then season ='Fall';
   ....etc;
run;

Вы также можете использовать формат, но поскольку вы только начинаете, это, вероятно, проще.

Вопрос других пользователей, который кажется действительно очень похожим: https://communities.sas.com/t5/SAS-Enterprise-Guide/proc-glm/m-p/492142

РЕДАКТИРОВАТЬ: Используйте INTCK () для расчета количества интервалов. Затем используйте INTNX для увеличения интервалов и подсчета дней. То, как вы выравниваете даты, можно контролировать с помощью первого параметра функции INTNX (). Вы можете проверить документацию для точных особенностей.

data want;

    start_date="22Mar2005"d;
    end_date="01Mar2006"d;
    num_intervals=intck('quarter', start_date, end_date, 'C') ;

    do interval=0 to num_intervals;
        season_start=intnx('Month3.3', start_date, interval, 'b');
        season_end=intnx('Month3.3', start_date, interval, 'e');
        Number_Days=season_end - season_start + 1;
        output;
    end;
    format start_date end_date season: yymmddd10.;

run;
...