Ciao esperti JSL,
Ho grossi problemi a trovare il valore 2° massimo, 3° massimo ecc. in 1 colonna.
Per una colonna di seguito, spero di identificare i primi 5 valori massimi e di contrassegnare il valore in una colonna sperata.
Sembra che riesca a trovare solo il col max, ma ho molte difficoltà a trovare il 2° max, il 3° max ecc.
Esiste una formula standard per questa soluzione?
Grazie
(100,
232,
343,
121,
100,
132,
100,
100,
100,
100,)
Potresti essere su una versione precedente di JMP... funziona quando inserisci manualmente la formula che ho mostrato per quello scenario? Questo potrebbe funzionare per te: non riesco a ricordare quando il supporto per variabile è stato aggiunto alle funzioni della colonna ... Penso che potrebbe essere stato JMP 14 per molti di loro.
Saluti,
Brady
Molte grazie.
Per il caso 1, sembra che il mio JMP non abbia Rank sotto Distributional, ha solo le prime 6 opzioni come hai mostrato nelle immagini.
Colonna formula > Distribuzione > Classifica (ordine inverso).
Penso che il caso 3 sembri una soluzione migliore per il mio problema attuale, apprezzo l'aiuto.
Ciao,
Questo dipende da cosa intendi per "max" e se sei disposto a ordinare il tavolo. Tratterò alcuni casi comuni e spero che uno di questi copra il tuo caso d'uso.
Caso 1: "max" indica la posizione nel set di dati ordinato di valori originali, inclusi i duplicati.
È possibile utilizzare una trasformazione incorporata per questo. Fare clic con il pulsante destro del mouse sui dati nella colonna di interesse e selezionare Nuova colonna formula > Distribuzione > Classifica (ordine inverso).
Cliccando sulla formula che viene creata, abbiamo quanto segue, che funziona indipendentemente dal fatto che la tabella sia ordinata o meno:
(Col Number( :Col1 ) - Col Rank( :Col1 )) + 1

Caso 2: "Max" indica la posizione nell'insieme ordinato di valori UNICI (nessuna duplicazione). Non disposto a preordinare i dati.
***Nota: a causa della sua dipendenza da array associativi, questo approccio funziona solo con dati numerici che coinvolgono numeri interi.
Possiamo usare la formula contorta (e costosa):
Loc(
Matrix(
Reverse(
Associative Array( (:Col1 << get data table) :: col1 << getvalues ) << get keys
)
),
:Col1
)
Questa formula esegue le seguenti operazioni:
1) Ottiene i valori dalla colonna di interesse e li passa a un array associativo, che rimuove i duplicati.
2) Ottiene le chiavi dell'array associative (in ordine dal basso verso l'alto per impostazione predefinita) e ne inverte l'ordine.
3) Usa la funzione Loc() per riportare la posizione della riga data all'interno della matrice di chiavi di matrice associative invertite.
Caso 3: come nel caso 2, ma siamo disposti a preordinare (decrescente) per colonna di interesse.
In questo caso possiamo utilizzare una formula più semplice ed efficiente, seppur autoreferenziale:
If( Row() == 1,
1,
Lag( :Formula3 ) + (Lag( :Col1 ) != :Col1)
)
Di seguito, vediamo la differenza tra la prima formula e le due successive. Anche in questo caso, solo la terza formula dipende dall'ordinamento delle tabelle.

Se vuoi provarlo, esegui lo script qui sotto. Inizialmente appare non ordinato, ma dopo una pausa di un secondo, ordina per col1, a quel punto i risultati della terza formula corrisponderanno ai risultati della seconda.
dt = New Table( "Example",
Add Rows( 20 ),
New Column( "Col1", <<SET values=""></SET>
Saluti,
Brady