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

Posted

技术标签:

【中文标题】SAS连续观察中的两个平均值 - 考虑到下降时间变化的额外小时【英文标题】:Average two values in consecutive observations in SAS - account for extra hour in fall time change 【发布时间】:2021-08-27 15:59:55 【问题描述】:

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

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 上执行此操作?平均 HE24 观察结果会不会有问题? 我被引导到平均 HE2 和 HE3,因为那是时间变化发生的时候。这是将用于预测的特定电力负荷数据,因此尽可能接近小时的实际值很重要。 【参考方案1】:

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

我们会将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,那么您需要将这些变量转移到临时保留变量中。

【讨论】:

以上是关于SAS连续观察中的两个平均值 - 考虑到下降时间变化的额外小时的主要内容,如果未能解决你的问题,请参考以下文章

几个小时后,RAM 密集型 C# 进程变慢

sas如何计算相邻观测的差值

SAS / PROC SQL - 只要有重复(不只是删除重复),删除BY组中的所有观察

sas 中的第一次和最后一次观察

进入11月16日重要变盘时间序列(原创)

计算由时间间隔分隔的连续每小时记录块的平均值