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
,那么您需要将这些变量向前传递在临时保留变量中。
我有如下几年的日期数据:
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
,那么您需要将这些变量向前传递在临时保留变量中。