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 :
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
Merci

Slumpy