SAS 中连续观察的两个值的平均值 - 考虑下降时间变化的额外时间

Average two values in consecutive observations in SAS - account for extra hour in fall time change

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

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 小时(为简洁起见未显示)。提前致谢!

让我们假设有某种指示器指示时间更改何时发生。因为我们知道它位于 HE2 和 HE3,所以我们将在本示例中直接使用 2 和 3 的值。平均两个值就是将它们相加并除以二。

我们将 HE 的值存储在变量 sum_values 中。接下来,我们将检查我们在哪个 HE 中。如果我们在 2 中,让我们删除该行,什么都不做。如果我们在 3 中,让我们用我们求和的总值替换该值,并将它除以我们求平均的值的数量(在本例中为两个)。然后我们将其 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,那么您需要将这些变量向前传递在临时保留变量中。