【问题标题】:Averages in SAS with dates using monthsSAS 中的平均值,日期使用月份
【发布时间】:2016-06-07 16:18:20
【问题描述】:

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

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 天内的所有降雨量相加,然后除以每个月的天数?这是我的桌子的一个sn-p。

【问题讨论】:

  • 在您的 SQL 示例中删除中间数据集。直接从源数据中总结即可。

标签: sas mean data-manipulation standard-deviation


【解决方案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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-19
    • 2019-08-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多