imiter la fonction excel "PercentRank"
Salut,
J'aurais besoin d'imiter la fonction excel "PercentRank". D'apres ce que j ai cru comprendre, elle n est pas directement implementée en .net. :cry:
D apres ce que j ai compris de l'article wiki ou d'autres sites web, pour calculer le percentrank il faut :
Si on cherche le Percentrank de X, il faut rechercher:
- le nombre de valeurs inferieures a X dans le dataset (Cl dans l article wiki)
- le nombre de fois que X est present dans le dataset (fi dans l article wiki)
- le nombre total de valeurs dans le dataset (N dans l article wiki)
Puis la formule serait donc (Cl + 0.5*fi)/N
Mon probleme est qu avec mon code, si j'utilise cette simple formule, je ne retombe pas exactement sur les valeurs que me donne Excel. Si je considere par exemple la liste de valeurs suivantes:
13,12,11,8,4,3,2,1,1,1
Si je considere les valeurs X suivantes: 2,4,8 et 5, j'obtiens par excel / Par la formule les valeurs suivntes :
2 ---> 0.333 pour Excel et 0.35 par la fromule
4 ---> 0.555 pour Excel et 0.55 par la formule
8 ---> 0.625 pour excel et 0.65 par la formule
5 ---> 0.583 pour Excel et 0.6 par la formule
Quelqu un saurait pourquoi ?
Mon code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| Public Shared Function PercentRank(ByVal Pctl As Double, ByVal ValueList As List(Of Double)) As Double
Dim SelectedFlows As New List(Of Double)((ValueList.GetRange(0, ValueList.Count)))
SelectedFlows.Sort()
Dim NumElems As Integer = SelectedFlows.Count
Dim Cl As Integer = 0
Dim fi As Integer = 0
'search nbr of values below
For i As Integer = 0 To NumElems - 1
If SelectedFlows(i) < Pctl Then
Cl = i
ElseIf SelectedFlows(i) = Pctl Then
fi = fi + 1
Else
Exit For
End If
Next
PercentRank = (Cl + 0.5 * fi) / NumElems
End Function |
Merci
Slumpy