我有一个矩阵:
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列之间的差异的SD感兴趣):
{=STDEV(IF(A1:A9<>"",IF(B1:B9<>"",A1:A9-B1:B9)))}
我自己不能完全修改此代码,但也许有人会觉得它有用。
任何建议将不胜感激。
答案 0 :(得分:1)
主要问题是,您正在使用SUBTOTAL(1 ...来获取AC列的平均值,而分别使用DFTO列来获取平均值,但是还使用AVERAGE来获取平均值列的平均值–距离太远了。是您尝试使用单个数字的stdev来获取#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。为什么这是错误的答案?不幸的是,当您在col AC或DF中获得一个空白单元格时,您的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)))))
)