Möchte das Perzentil einer Zahl innerhalb eines Datensatzes finden. Wie viel Prozent der Werte liegen über/unter einer bestimmten Zahl? Gibt es neben dem Betrachten eines CDF- oder Prob Dist-Diagramms einen vorhandenen Pfad, um diese Nummer zu erhalten, oder ist dies eine JSL-Aufgabe?
Sie können die Quantile-Statistik innerhalb der Tabulate-Plattform verwenden (Analysieren>Tabulieren).
Sie können dies nach Belieben mit einer Formel oder einem JSL-Snippet tun, siehe Screenshot und Skript unten.
Der erste Teil der Formel generiert die Tabelle für Werte und Perzentile, der zweite sucht das Perzentil für die aktuelle Zeile.

Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
dt << New Column( "PercentileRank",
Formula(
cdf_arr = CDF( :weight << get values );
cdf_arr[2][Loc( cdf_arr[1], :weight )];
)
);
David:
Danke für die Antwort. Ich war mit der Quantil-Statistik vertraut. Damit gebe ich das Quantil an und JMP generiert den Wert, der diesem Quantil entspricht. Ich möchte den Wert angeben und das Quantil generieren. Meine anfängliche Erklärung war unzureichend.
Greg
Georg:
Danke für deinen Beitrag. Ich habe die JSL so angepasst, dass sie mit meinem Tabellen- und Spaltennamen übereinstimmt, aber ich vermute, dass dies eine sehr prozessorintensive Berechnung ist. Es ist über 20 Minuten her und die Räder drehen sich immer noch. Ich habe ungefähr 240.000 Datenzeilen zu verarbeiten. Es sieht so aus, als würde ich bei der Excel-Methode bleiben, die ich eingerichtet habe, bis ich Zeit finde, dieses Problem eingehender zu untersuchen. Danke noch einmal.
Greg
Hier ist eine JMP-Funktion, die genau die Methodik verwendet, die in der Excel-Funktion PERCENTILEANK verwendet wird, wie auf der Microsoft Excel-Hilfeseite beschrieben
https://support.microsoft.com/en-us/office/percentrank-function-f1b5836c-9619-4847-9fc9-080ec9024442
Unten habe ich die Beispieltabelle von der Hilfeseite zusammen mit der von mir erstellten JMP-Funktion bereitgestellt
Names Default To Here( 1 );
New Table( "Excel Example",
Add Rows( 10 ),
New Column( "Data",
Numeric,
"Nominal",
Format( "Best", 12 ),
Set Values( [13, 12, 11, 8, 4, 3, 2, 1, 1, 1] )
)
);
dt = Current Data Table();
percentRank = Function( {col, value},{default local},
mydt = Current Data Table();
theValue = .;
theRows = mydt << get rows where( As Column( mydt, col ) == value );
If( N Rows( theRows ) > 0,
gt = Col Number( If( As Column( mydt, col )[Row()] > value, Column( mydt, col )[Row()], . ) );
lt = Col Number(
If( As Column( mydt, col )[Row()] < value & Is Missing( As Column( mydt, col )[Row()] ) == 0,
As Column( mydt, col )[Row()],
.
)
);
theValue = lt / (lt + gt);
,
lower = upper = .;
lower = Col Max( If( As Column( mydt, col ) < value & Is Missing( As Column( mydt, col )[Row()] ) == 0, Column( mydt, col )[Row()], . ) );
upper = Col Min( If( As Column( mydt, col ) > value, Column( mydt, col )[Row()], . ) );
// get the percentileRank for upper and lower
upperPR = percentRank(col,upper);
lowerPR = percentRank(col,lower);
intervalPCT=(value-lower)/(upper-lower);
theValue = lowerPR+(intervalPCT*(upperPR-lowerPR));
);
Return( theValue );
);
x = percentRank( "data", 8 ); // a data point found in the data
show("found in table",x);
x = percentRank( "data", 5 ); // a data point not found in the data
show("Not found in table",x);