我正在寻找一个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"))
但是,这对于计算不同集合的中位数没有帮助。
我该怎么办?
感谢您的帮助!
答案 0 :(得分:0)
要检查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 :(得分:0)
这里有三个问题:
不是一个好的起点......
广告#1,您可以将1,2,3,4,1,2,3, ...
更改为1,1,1,1, 2,2,2, ...
以表明属于哪些
ad#2,#3 ...我建议在VBA中定义一个function = 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”,...)中使用新函数
因此所有范围的单一公式....注意:冒泡排序对于大范围来说不是很经济