SAS中的平均值,日期使用月份

SAS中的平均值,日期使用月份,sas,mean,data-manipulation,standard-deviation,Sas,Mean,Data Manipulation,Standard Deviation,假设我每天和每月都有50年的数据。我还有一个列,列出了数据集中每天的最大降雨量。我希望能够计算出这50年中每一年的月平均降雨量和标准差。我将如何完成这项任务?我考虑过使用PROC方法: PROC MEANS DATA = WORK.rainfall; BY DATE; VAR AVG(max_rainfall); RUN; 但我不知道如何让SAS了解我想使用MMDDYY格式的MM来指示从何处开始和停止计算每个月的平均值。我也不知道如何在此PROC MEANS语句中告诉SAS如何使用MMDDYY

假设我每天和每月都有50年的数据。我还有一个列,列出了数据集中每天的最大降雨量。我希望能够计算出这50年中每一年的月平均降雨量和标准差。我将如何完成这项任务?我考虑过使用PROC方法:

PROC MEANS DATA = WORK.rainfall;
BY DATE;
VAR AVG(max_rainfall);
RUN;
但我不知道如何让SAS了解我想使用MMDDYY格式的MM来指示从何处开始和停止计算每个月的平均值。我也不知道如何在此PROC MEANS语句中告诉SAS如何使用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天内的所有降雨量相加,然后除以每个月的天数?这是我桌子上的一个片段


您可以使用一种格式为自己分组日期。但是您应该使用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;

您可以使用格式为自己分组日期。但是您应该使用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;

在SQL示例中,删除中间数据集。直接从源数据进行汇总即可。在SQL示例中,删除中间数据集。直接从源数据中总结即可。