Алгоритм PercentRank в VBA - PullRequest
       16

Алгоритм PercentRank в VBA

0 голосов
/ 26 января 2011

Я нашел ответ на вопрос «Как назначить номер ранга массиву, когда есть связи» в Php и (выглядело немного) C ++.Я также нашел пару ответов о PercentRank в Excel на языке, которого я не знаю.

Может ли кто-нибудь помочь мне сделать это в VBA?Мне нужно рассчитать PercentRank из 12 значений в Access для отчета, и я не могу использовать Excel.Вот пример того, что мне нужно:

   Per  Val %Rank
    01  80  0.82
    02  74  0.45
    03  88  1.00
    04  60  0.00
    05  86  0.91
    06  68  0.18
    07  64  0.09
    08  78  0.64
    09  76  0.55
    10  72  0.27
    11  78  0.64
    12  72  0.27 

Обратите внимание, что для периодов 08 и 11 значение одинаково.Также за период 10 и 12. Я где-то читал, что при наличии связей функция должна вычислять среднее значение некоторой сортировки.

Кто-нибудь может помочь с функцией, написанной на VBA?.

D.Lamarche

1 Ответ

1 голос
/ 26 января 2011

Связи должны давать такой же процентный ранг, как показано в вашем примере.Если вашего числа х нет в массиве, то вам нужно экстраполировать.Если вы уверены, что x находится в массиве, вы можете упростить до этого

Public Function PRank(vaArray As Variant, x As Variant) As Double

    Dim lLower As Long
    Dim lHigher As Long
    Dim i As Long

    For i = LBound(vaArray, 1) To UBound(vaArray, 1)
        If vaArray(i, 1) < x Then
            lLower = lLower + 1
        ElseIf vaArray(i, 1) > x Then
            lHigher = lHigher + 1
        End If
    Next i

    PRank = lLower / (lLower + lHigher)

End Function

Если вы передадите значения x, которых нет в vaArray, это приведет к неверному результату.Кроме того, это предполагает, что вы передаете двумерный массив (как в столбце Excel), поэтому вам, возможно, придется подстроиться под это.

...