尾随累积和公式我有一个很简单的公式需求。 我有一个温度数据集,需要计算过去120天内的尾随累积总和(称为“度加热周”,因为我会将这个总和除以7转换成周)。 我知道如何获取尾随平均数,也知道如何获取累积总和,但是是否有可能获得尾随的120天累积总和? 在这种情况下,当温度超过31.3℃时,将给出0.25的“得分”(有关公式,请参阅“ DH-6 hrs”列)。 基本上,我希望在120天的窗口中累积这0.25个值,但是我只知道如何按日期/月/年等进行分区(例如,请参见“ #DHWs”脚本),而不是实际窗口时间。 我相信这一定可行!
分析工具数据表脚本编写回复:尾随累积总和公式如果我正确解释了您想要的内容,我相信下面的公式将计算出连续的120个尾随累积和
If( Row() == 1,
holdMatrix = []
);
If( :Name( " Sea Surface Temperature (deg C)" ) > 31.3,
holdMatrix = holdMatrix || Matrix( 0.25 ),
holdMatrix = holdMatrix || Matrix( . )
);
If( N Cols( holdMatrix ) == 121,
holdMatrix[1] = []
);
Sum( holdMatrix ) / 7;
回复:尾随累积总和公式大! 做到了。 我只是对其进行了修改,以反映每天有八次测量时间的事实(即每一行不是唯一的一天,因此我在评估中乘以121 x 8 = 968)。 数据之所以有意义,是因为该值在下降之前达到了我之前计算的年度最大值。 非常感谢。 我希望公式编辑器中有一个尾随的累加总和,其输入与列移动平均值(我一直使用)一直相似:权重和N。 也许我将其添加到“愿望”列表中。
回复:尾随累积总和公式我有一个问题来自数据集中的一个令人讨厌的怪癖:我需要评估过去120天内以小时为单位的累积总和(不是我之前提到的几周)。 但是,时间间隔不一致(请参见附表)。 在大多数情况下,每天进行8次测量,但有时会更少。 基本上,任何时候温度> 31.3时,我都想将时差添加到列中。 使用“ dif”功能很容易。 但是,我苦恼的是如何将“ 120天”添加到矩阵公式中。 因此,在所附的表格中,我想计算过去120天的“ DHH”的累计和。 我需要公式来跟踪日期,而不是在公式中包含“行”数。 那可能吗?
回复:尾随累积总和公式我不确定您要使用的除数,但是我使用了数据矩阵范围内的小时数。这是我想出的公式
If( Row() == 1,
holdMatrix = [];
dateMatrix = [];
);
If( :Name( " Sea Surface Temperature (deg C)" ) > 31.3,
holdMatrix = holdMatrix || 0.25;
dateMatrix = dateMatrix || Informat( :date, "m/d/y" );
);
If( N Cols( dateMatrix ) != 0,
While( dateMatrix[N Cols( dateMatrix )] > dateMatrix[1] + In Days( 120 ),
holdMatrix[1] = [];
dateMatrix[1] = [];
);
x = Sum( holdMatrix ) / ((dateMatrix[N Cols( dateMatrix )] - dateMatrix[1]) / In Hours( 1 ));
,
x = .
);
x;
回复:尾随累积总和公式吉姆(Jim),尽管您的新公式得出的值似乎太低(尽管该公式看似有意义),但感谢您再次查看我的问题。 但是也许我应该以不同的方式陈述我的需要,在这种情况下,可能有一个更简单的(或者至少是更直接的解决方案):我想知道在过去的120天内温度过高的小时数31.3℃。 由于通常每三个小时才测量一次温度(在大多数情况下),所以这通常相当于3个小时的时间,因此基本上是一系列3的总和(请参阅附表中的“ DHH”列)。 因此,在最暖和的月份中,该值可能在数百中。 因此,基本上,我需要DHH列的尾随120天总和,但是考虑到每天的测量次数不同,这一点很棘手!
回复:尾随累积总和公式如果您只想要总和,那就不要将总和除以
If( Row() == 1,
holdMatrix = [];
dateMatrix = [];
);
If( :Name( " Sea Surface Temperature (deg C)" ) > 31.3,
holdMatrix = holdMatrix || 0.25;
dateMatrix = dateMatrix || Informat( :date, "m/d/y" );
);
If( N Cols( dateMatrix ) != 0,
While( dateMatrix[N Cols( dateMatrix )] > dateMatrix[1] + In Days( 120 ),
holdMatrix[1] = [];
dateMatrix[1] = [];
);
x = Sum( holdMatrix ) ;
,
x = .
);
x;