Hallo JSL-Experten,
Ich habe große Probleme, den 2. Maximalwert, den 3. Maximalwert usw. in einer Spalte zu finden.
Für eine Spalte unten hoffe ich, die Top-5-Maximalwerte zu identifizieren und den Wert in einer separaten Spalte zu markieren.
Anscheinend kann ich nur die maximale Spalte finden, habe aber große Schwierigkeiten, die 2. maximale, 3. maximale usw. zu finden.
Gibt es eine Standardformel für diese Lösung?
Danke
(100,
232,
343,
121,
100,
132,
100,
100,
100,
100,)
Möglicherweise verwenden Sie eine ältere Version von JMP ... funktioniert es, wenn Sie die Formel, die ich für dieses Szenario gezeigt habe, manuell eingeben? Dies könnte für Sie funktionieren - ich kann mich nicht erinnern, wann die Unterstützung für By-Variablen zu den Spaltenfunktionen hinzugefügt wurde ... Ich denke, für viele von ihnen war es JMP 14.
Beifall,
Brady
Vielen Dank.
Für Fall 1 scheint mein JMP keinen Rang unter Verteilung zu haben, es hat nur die ersten 6 Optionen, wie Sie in den Bildern gezeigt haben.
Formelspalte > Verteilung > Rang (umgekehrte Reihenfolge).
Ich denke, Fall 3 scheint eine bessere Lösung für mein aktuelles Problem zu sein, danke für die Hilfe.
Hallo,
Dies hängt davon ab, was Sie mit "max" meinen und ob Sie bereit sind, die Tabelle zu sortieren. Ich werde einige häufige Fälle ansprechen und hoffe, dass einer davon Ihren Anwendungsfall abdeckt.
Fall 1: "max" bedeutet Position im sortierten Datensatz der Originalwerte, einschließlich Duplikate.
Sie können dafür eine eingebaute Transformation verwenden. Klicken Sie mit der rechten Maustaste auf Daten in der gewünschten Spalte und wählen Sie Neue Formelspalte > Verteilung > Rang (umgekehrte Reihenfolge) aus.
Wenn Sie auf die erstellte Formel klicken, haben wir Folgendes, was unabhängig davon funktioniert, ob die Tabelle sortiert ist oder nicht:
(Col Number( :Col1 ) - Col Rank( :Col1 )) + 1

Fall 2: "Max" bedeutet Position im sortierten Satz von UNIQUE-Werten (keine Duplizierung). Nicht bereit, Daten vorzusortieren.
***Hinweis: Aufgrund seiner Abhängigkeit von assoziativen Arrays funktioniert dieser Ansatz nur mit numerischen Daten, die ganze Zahlen enthalten.
Wir können die komplizierte (und teure) Formel verwenden:
Loc(
Matrix(
Reverse(
Associative Array( (:Col1 << get data table) :: col1 << getvalues ) << get keys
)
),
:Col1
)
Diese Formel bewirkt Folgendes:
1) Ruft die Werte aus der interessierenden Spalte ab und übergibt sie an ein assoziatives Array, das Duplikate entfernt.
2) Ruft die assoziativen Array-Schlüssel ab (standardmäßig in der Reihenfolge von niedrig nach hoch) und kehrt ihre Reihenfolge um.
3) Verwendet die Funktion Loc(), um die Position der gegebenen Zeile innerhalb der Matrix der umgekehrten assoziativen Array-Schlüssel zu melden.
Fall 3: Wie Fall 2, aber wir sind bereit, nach der interessierenden Spalte vorzusortieren (absteigend).
In diesem Fall können wir eine einfachere und effizientere, wenn auch selbstreferenzielle Formel verwenden:
If( Row() == 1,
1,
Lag( :Formula3 ) + (Lag( :Col1 ) != :Col1)
)
Unten sehen wir den Unterschied zwischen der ersten Formel und den nächsten beiden. Auch hier ist nur die 3. Formel von der Tabellensortierung abhängig.

Wenn Sie dies ausprobieren möchten, führen Sie das folgende Skript aus. Sie erscheint zunächst unsortiert, sortiert aber nach einer Pause von einer Sekunde nach col1, sodass die Ergebnisse der 3. Formel mit den Ergebnissen der zweiten übereinstimmen.
dt = New Table( "Example",
Add Rows( 20 ),
New Column( "Col1", <<SET values=""></SET>
Beifall,
Brady