2016-02-25 4 views
0

Предположим, у меня есть 50 лет данных за каждый день и месяц. У меня также есть столбец, в котором указаны максимальные количества осадков за каждый день этого набора данных. Я хочу иметь возможность вычислять среднемесячные осадки и стандартное отклонение для каждого из этих 50 лет. Как бы я выполнил эту задачу? Я рассматривал с помощью PROC ОЗНАЧАЕТ:Средние значения в SAS с датами с использованием месяцев

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 дней, а затем разделить его на количество дней за каждый месяц? Вот фрагмент моего стола.

enter image description here

+0

В примере SQL удалите промежуточный набор данных. Просто подведите итоги непосредственно из исходных данных. – Tom

ответ

2

Вы можете использовать формат группы даты для вас. Но вы должны использовать инструкцию 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;