Excel:求解数组间差值的标准差(多列的平均值)

Excel: Solve the Standard Deviation of the Difference Between Arrays (Averages of Multiple Columns)

我有一个矩阵:

A   B   C   D   E   F
4   10  2   2   1   1
            3   7   9
2   6   6           
2       10  2   0   4
2   0   1       6   5

2   6   4   5   0   6
3               8   
5   1   10  2   2   8

我想找出列 A:C 和 D:F 的平均值之间的行差异的标准差 (STDEV.S)。至关重要的是,我只想为 A:C 和 D:F 列中具有完整条目的行计算此值(例如,没有空格)。

在本例中,标准偏差为 1.9。让我们分解一下。首先,我们确定列 A:C 和 D:F 的行平均(参见下面的 G 和 H 列)。请注意,这仅针对第 1、7 和 9 行进行了计算,因为它们是唯一在列 A:F:

中具有完整数据的行
A   B   C   D   E   F   G   H
4   10  2   2   1   1   5.3 1.3
            3   7   9       
2   6   6                   
2       10  2   0   4       
2   0   1       6   5       

2   6   4   5   0   6   4   3.7
3               8           
5   1   10  2   2   8   5.3 4

然后我们取 G 列和 H 列之间的行差异(见 I 列):

A   B   C   D   E   F   G   H   I
4   10  2   2   1   1   5.3 1.3 4
            3   7   9           
2   6   6                       
2       10  2   0   4           
2   0   1       6   5           

2   6   4   5   0   6   4   3.7 0.3
3               8               
5   1   10  2   2   8   5.3 4   1.3

最后计算第I列的标准差,即1.9。

我希望在单个数组公式中实现这一点。我已经尝试了以下但失败了:

尝试 1:

{=STDEV.S(AVERAGE(IF(SUBTOTAL(2,OFFSET(A1,ROW(A1:A9)-ROW(A1),0,1,COLUMNS(A1:C1)))=COLUMNS(A1:A1),IF(SUBTOTAL(2,OFFSET(D1,ROW(D1:D9)-ROW(D1),0,1,COLUMNS(D1:F1)))=COLUMNS(D1:F1),SUBTOTAL(1,OFFSET(A1,ROW(A1:A9)-ROW(A1),0,1,COLUMNS(A1:C1)))))))-(AVERAGE(IF(SUBTOTAL(2,OFFSET(A1,ROW(A1:A9)-ROW(A1),0,1,COLUMNS(A1:C1)))=COLUMNS(A1:C1),IF(SUBTOTAL(2,OFFSET(D1,ROW(D1:D9)-ROW(D1),0,1,COLUMNS(D1:F1)))=COLUMNS(D1:F1),SUBTOTAL(1,OFFSET(D1,ROW(D1:D9)-ROW(D1),0,1,COLUMNS(D1:F1)))))))}

结果#DIV/0!使用 Ctrl + Shift + Enter

输入后出现警告

尝试 2:

我使用以下公式成功计算了两列(而不是两个平均列)之间差异的标准差(在这种情况下,我们对 A 列和 B 列之间差异的标准差感兴趣):

{=STDEV(IF(A1:A9<>"",IF(B1:B9<>"",A1:A9-B1:B9)))}

我自己不能完全适应这段代码,但也许有人会发现它有用。

如有任何建议,我们将不胜感激。

主要问题是您正在使用 SUBTOTAL(1... 来获取 A-C 列的平均值并分别获取 D-F 列的平均值,但随后还使用 AVERAGE 来获取平均值的平均值 - 太过分了。结果是您尝试获取单个数字的标准偏差,它给您 #DIV/0!

如果你把它们去掉并做一些小的调整,你会得到

=STDEV.S(IF(SUBTOTAL(2,OFFSET(A1,ROW(A1:A9)-ROW(A1),0,1,COLUMNS(A1:C1)))=COLUMNS(A1:C1),IF(SUBTOTAL(2,OFFSET(D1,ROW(D1:D9)-ROW(D1),0,1,COLUMNS(D1:F1)))=COLUMNS(D1:F1),SUBTOTAL(1,OFFSET(A1,ROW(A1:A9)-ROW(A1),0,1,COLUMNS(A1:C1)))))-IF(SUBTOTAL(2,OFFSET(A1,ROW(A1:A9)-ROW(A1),0,1,COLUMNS(A1:C1)))=COLUMNS(A1:C1),IF(SUBTOTAL(2,OFFSET(D1,ROW(D1:D9)-ROW(D1),0,1,COLUMNS(D1:F1)))=COLUMNS(D1:F1),SUBTOTAL(1,OFFSET(D1,ROW(D1:D9)-ROW(D1),0,1,COLUMNS(D1:F1))))))

结果为 1.3。为什么这是错误的答案?不幸的是,当您在 cols A-C 或 D-F 中得到一个空白单元格时,您的 If 语句评估为 FALSE,并且在某些情况下您最终得到 FALSE-FALSE,其评估为 0 并为您提供一个包含在 STDEV 中并给出错误的数值结果。

你可以通过重构公式来解决,换句话说

If first block is complete
    If second block is complete
        Calculate and subtract means
Take Stdev of result

给出

=STDEV.S(
IF(SUBTOTAL(2,OFFSET(A1,ROW(A1:A9)-ROW(A1),0,1,COLUMNS(A1:C1)))=COLUMNS(A1:C1),
     IF(SUBTOTAL(2,OFFSET(D1,ROW(D1:D9)-ROW(D1),0,1,COLUMNS(D1:F1)))=COLUMNS(D1:F1),
          SUBTOTAL(1,OFFSET(A1,ROW(A1:A9)-ROW(A1),0,1,COLUMNS(A1:C1)))-SUBTOTAL(1,OFFSET(D1,ROW(A1:A9)-ROW(A1),0,1,COLUMNS(D1:F1)))))
)