我正在寻找一个 excel 公式,它可以帮助我计算不同数据的中位数。
1 45 2 54 3 26 4 12 1 34 2 23 3 9
现在,我需要从 B1:B4 到 B5:B8 计算数据的中位数,并打印该数字是否小于/等于/大于中位数.. 我想出了初步公式
=IF(MEDIAN($B$1:$B$4)<B1;"g";IF(MEDIAN($B$1:$B$4)=B1;"e";"l"))
但是,这无助于计算不同集合的中位数。
我应该怎么办?
谢谢您的帮助!
要检查 B1 是否大于、小于或等于 B1:B4 和 B5:B8 的中位数的中位数(在本例中为 29.25),则可以使用如下内容:
=IF(B1>(MEDIAN(MEDIAN(B1:B4),MEDIAN(B5:B7))),"g",IF(B1=(MEDIAN(MEDIAN(B1:B4),MEDIAN(B5:B7))),"e","l"))
如果您只想检查 B1:B4 (如您的示例),您可以使用:
=IF(B1>MEDIAN(B1:B4),"g",IF(B1=MEDIAN(B1:B4),"e","l"))
更新:根据您在下面的评论,这是您可以在 C1 中编写并向下拖动到 C4 的内容:
=IF(B1>MEDIAN($B$1:$B$4),B1&">"&MEDIAN($B$1:$B$4),IF(B1=MEDIAN($B$1:$B$4),B1&"="&MEDIAN($B$1:$B$4),B1&"<"&MEDIAN($B$1:$B$4)))
您在这里遇到三个问题:
不是一个好的起点....
广告#1,你可以改变你的1,2,3,4,1,2,3, ...
朝向1,1,1,1, 2,2,2, ...
来表明什么是一起的
ad #2, #3 ... 我建议在 VBA 中定义一个函数 =MEDIANIF(); 例子:
Function MedianIf(R As Range, Cr As Variant) As Variant
Dim Idx As Integer, Jdx As Integer, A() As Variant, CCnt As Integer, Tmp As Variant
' find array size
CCnt = 0
For Idx = 1 To R.Rows.Count
If R(Idx, 1) = Cr Then CCnt = CCnt + 1
Next Idx
'dim array
ReDim A(CCnt - 1)
' load from range into array
CCnt = 0
For Idx = 1 To R.Rows.Count
If R(Idx, 1) = Cr Then
A(CCnt) = R(Idx, 2)
CCnt = CCnt + 1
End If
Next Idx
' bubble sort
For Jdx = CCnt - 1 To 0 Step -1
For Idx = 0 To Jdx - 1
If A(Idx) > A(Idx + 1) Then
Tmp = A(Idx)
A(Idx) = A(Idx + 1)
A(Idx + 1) = Tmp
End If
Next Idx
Next Jdx
' get Median
If CCnt Mod 2 = 1 Then
MedianIf = A(Int(CCnt / 2))
Else
MedianIf = (A(CCnt / 2 - 1) + A(CCnt / 2)) / 2
End If
End Function
通过选择范围 2 col 的宽和 x 行向下来使用此功能,例如
=MedianIF($A$1:$B$7,A1)
我们开始了...现在您可以在 =IF(.... , "g", ...) 中使用新功能
所以一个公式适用于所有范围....注意:冒泡排序对于大范围来说不是很经济