2016-02-26 5 views
0

Я пытаюсь вычислить среднегодовые и среднеквадратичные отклонения от максимальной и минимальной температур,. Мой код выглядит следующим образом:SAS PROC SQL Ошибка при вычислении средних значений

PROC SQL; 
create table new2 as 
    select date,SUM(max_temp) as max_temp,SUM(min_temp) as min_temp, 
SUM(precip) as precip 
    from WORK.ROCH_DATA 
    group by date; 

create table average2 as 
    select year(date) as year,(date) as year2,avg(max_temp) as maxavg, 
avg(min_temp) as minavg, avg(precip) as avgprecip, std(max_temp) as 
stdmaxtemp, 
    std(min_temp) as stdmintemp,std(precip) as stdprecip 
    from new2 
    group by year; 
QUIT; 

Мой код в конечном итоге плюет что-то подобное;

enter image description here

Он повторяет YEAR2, и год столбец (я только хочу один с соответствующим годом, т.е. 1916.1917) и держит перерасчет за один год. Как мне просто заставить его показать мне одиночные вычисления за 50 лет в моих данных? (т. е. исключить пересчеты)

+0

Проблема этот код: 'год (дата) в год (дата), как year'. На самом деле не имеет смысла давать два столбца с одинаковым именем. –

+0

Я исправил это, но теперь это еще одна проблема. Обновление вопроса один момент. –

+1

Удалите свой первый proc sql и укажите второй в вашей таблице work.ROCH. – Reeza

ответ

1

Поскольку это 4-й раз, когда вы задали этот же вопрос, вот ответ, хотя я не вижу, что не так с некоторыми из других. Два способа использования proc. Вы можете использовать либо выход, либо ODS OUTPUT, я закодировал оба, но это не обязательно. Ваш конечный результат - это 3 набора данных, которые должны иметь то, что вы хотите, в разных форматах.

proc means data=roch_data noprint stackods; 
class date; 
format date year4.; 
var max_temp min_temp precip; 
output out=summary_proc_mean1 mean= std= /autoname; 
ods output summary=summary_proc_mean2; 
run; 

Использование Proc SQL

PROC SQL; 
create table average2 as 
    select year(date) as year, 
    avg(max_temp) as maxavg, 
    avg(min_temp) as minavg, 
    avg(precip) as avgprecip, 
    std(max_temp) as stdmaxtemp, 
    std(min_temp) as stdmintemp, 
     std(precip) as stdprecip 
    from roch_data 
    group by year; 
QUIT;