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.
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 :Merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Slumpy
Partager