首页 > 解决方案 > SAS 连续观察中的两个平均值 - 考虑到下降时间变化的额外小时

问题描述

对于几年的日期,我有如下数据:

Date           HE       Value
04NOV2007       1       981.00
04NOV2007       2       925.00
04NOV2007       3       900.00
04NOV2007       4       875.00
04NOV2007       5       880.00
04NOV2007       6       894.00
04NOV2007       7       946.00
04NOV2007       8       982.00
04NOV2007       9      1051.00 
04NOV2007      10      1122.00
04NOV2007      11      1167.00
04NOV2007      12      1194.00
04NOV2007      13      1203.00
04NOV2007      14      1199.00
04NOV2007      15      1200.00
04NOV2007      16      1194.00
04NOV2007      17      1203.00
04NOV2007      18      1238.00
04NOV2007      19      1379.00
04NOV2007      20      1402.00
04NOV2007      21      1357.00
04NOV2007      22      1300.00
04NOV2007      23      1205.00
04NOV2007      24      1093.00
04NOV2007      24       994.00

为了消除在下降时间更改日期创建的额外观察,我需要平均 HE2 和 HE3 的值,用新值替换 HE2 的值,然后在移动其他时间之前删除 HE3 观察。将 HE 值移动 1 是没有问题的,但我不确定完成平均 HE2 和 HE3 任务的最有效方法。在我的完整数据集中,每个日期都有 24 小时(为简洁起见,未显示)。先感谢您!

标签: sasaveragedst

解决方案


让我们假设有某种指示时间变化发生的时间。由于我们知道它位于 HE2 和 HE3,因此我们将在此示例中直接使用 2 和 3 的值。平均两个值只是将它们相加并除以二。

我们将 的值存储HE在变量 中sum_values。接下来,我们将检查HE我们所在的位置。如果我们在 2 中,让我们删除该行并且什么也不做。如果我们在 3 中,让我们用我们总结的总值替换该值,然后将其除以我们平均的值的数量(在本例中为 2)。然后我们将其值 HE 设置为 2。

data want;
    set have;
    by date he;

    if(HE IN(2,3) ) then do;
        sum_values+value;
        n_values+1;

        if(HE = 2) then delete;
            else if(HE = 3) then do;
                value = sum_values/n_values;
                HE    = 2;
           end;
    end;
run;

如果您的数据与上述类似,则此方法有效,但如果您有其他相关变量依赖HE2并需要替换,HE3那么您需要将这些变量转移到临时保留变量中。


推荐阅读