Средние значения в SAS с датами по месяцам

Допустим, у меня есть данные за 50 лет на каждый день и месяц. У меня также есть столбец, в котором указано максимальное количество осадков за каждый день этого набора данных. Я хочу иметь возможность рассчитать среднемесячное количество осадков и стандартное отклонение для каждого из этих 50 лет. Как бы я выполнил эту задачу? Я рассматривал возможность использования PROC MEANS:

PROC MEANS DATA = WORK.rainfall;
BY DATE;
VAR AVG(max_rainfall);
RUN;

но я не знаю, как дать SAS понять, что я хочу использовать ММ формата ММДДГГ, чтобы указать, с чего начинать и заканчивать вычисление этих средних значений для каждого месяца. Я также не знаю, как я могу сообщить SAS в этом выражении PROC MEANS о том, как правильно форматировать данные, используя MMDDYY10. Вот почему мой код не работает.

Обновление: я также пытался использовать этот оператор,

proc sql;
create table new as
 select date,count(max_rainfall) as rainfall
  from WORK.rainfall 
  group by date;

create table average as
 select year(date) as year,month(date) as month,avg(rainfall) as avg
  from new
   group by year,month;

  quit;

но и это не решает проблемы, к сожалению. Это дает мне неправильные значения, хотя создает таблицу. Где в моем коде я мог ошибиться? Правильно ли я говорю SAS, что нужно сложить все осадки за 30 дней, а затем разделить на количество дней в каждом месяце? Вот фрагмент моей таблицы.

введите здесь описание изображения


person Konfu Chicken    schedule 25.02.2016    source источник
comment
В вашем примере SQL удалите промежуточный набор данных. Просто резюмируйте непосредственно из исходных данных.   -  person Tom    schedule 25.02.2016


Ответы (1)


Вы можете использовать формат, чтобы сгруппировать даты для вас. Но вы должны использовать оператор CLASS вместо оператора BY. Вот пример использования набора данных SASHELP.STOCKS.

proc means data=sashelp.stocks nway;
  where date between '01JAN2005'd and '31DEC2005'd ;
  class date ;
  format date yymon. ;
  var close ;
run;
person Tom    schedule 25.02.2016