0

我正在寻找一个 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"))

但是,这无助于计算不同集合的中位数。

我应该怎么办?

谢谢您的帮助!

4

2 回答 2

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)))
于 2011-09-26T07:52:58.973 回答
0

您在这里遇到三个问题:

  1. 您的第一列是序列而不是组标识符
  2. 没有 =MEDIANIF()
  3. 数据透视表也不支持中位数

不是一个好的起点....

广告#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", ...) 中使用新功能

所以一个公式适用于所有范围....注意:冒泡排序对于大范围来说不是很经济

于 2011-09-26T08:42:37.560 回答