Come utilizzo la formula Col Maximum con una condizione "where".Ciao, ho un problema in cui voglio formulare una nuova colonna come punto di riferimento per tutti gli altri paesi. Se ci sono più righe per il paese, voglio prenderne il valore massimo come punto di riferimento. Vedere l'esempio seguente per chiarimenti.
Il tipo di dati assomiglia a questo:
Paese Valore periodo
A 10 201301
A 30 201301
B 20 201301
C 50 201301
D 40 201301
Cosa voglio ottenere (con la formula della cella): Col Maximum (:value, :period, :country) dove :paese == "A"
Produzione:
Paese Valore periodo BenchMark
A 10 201301 30
A 30 201301 30
B 20 201301 30
C 50 201301 30
D 40 201301 30
Come puoi vedere, voglio confrontare il valore massimo del solo paese A.
Ho provato Col Maximum (:value, :period, :country == "A") e restituirà "50"
Col Maximum (:value, :period, :country) e Col Maximum (:value, :period, :country == "A") restituiscono entrambi "50"
Sono abbastanza sicuro che ci sia una soluzione semplice per questo!
Spero che possiate aiutare!
Grazie grazie!
Re: Come utilizzo la formula Col Maximum con una condizione "where".Domanda interessante: davanzale in attesa di una risposta?
C'è una serie di post con domande simili su come limitare il Col... aggregazione funzioni a uno specifico sottoinsieme.
(principalmente: limitarli al sottoinsieme di righe non escluse)
https://community.jmp.com/t5/Discussions/Compute-Column-Mean-while-restricting-observations-used/mp/10377#M10055
https://community.jmp.com/t5/Discussions/JMP10-Col-Max-and-Col-Min-functions-returned-the-data-from/td-p/10555
https://community.jmp.com/t5/Discussions/Col-Functions-and-Row-States/td-p/351705
L'idea:
Se si è interessati all'altezza media, si possono aggregare su tutte le righe, oppure si possono aggregare separatamente le voci maschili e femminili.
Per il secondo la soluzione è quasi semplice come per il primo: basta utilizzare una variabile GroupBy aggiuntiva per suddividere tra dati desiderati e dati indesiderati.
Ma ciò di cui un utente ha spesso bisogno in aggiunta: i valori dovrebbero apparire in tutte le rispettive righe (cioè anche per le donne).
[L'esempio con la colonna di riferimento nel post originale illustra perché un tale comportamento potrebbe avere senso.]
Con GroupBy è facile ottenere i valori corretti, ma come distribuirli su TUTTE le righe.
Se c'è qualcosa come una tabella di ricerca dietro a Col... aggregazione funzione, la funzione utilizza lo stesso identificatore
1) per dividere le righe in diversi gruppi per l'aggregazione ("M" / "F"):
Judy è una donna, il peso nella fila di Judy dovrebbe essere incluso peso medio femminile
2) come indice durante la lettura di una voce dalla tabella di ricerca ("M" / "F"):
Judy è una donna, la nuova colonna dovrebbe contenere peso medio femminile nella fila di Judy
Quindi, maschio e femmina ottengono gli stessi valori, perché l'identificatore è lo stesso (mean1) - oppure ottengono valori diversi perché l'identificatore è diverso (mean2).
quindi:
Un utente Jmp Potere utilizzare la funzione GroupBy per rimuovere i valori dal calcolo tramite:
- calcolare valori diversi per sottogruppi diversi
- scaricare i risultati indesiderati
ma poi ottiene
- ottenere valori diversi per sottogruppi diversi
gratuitamente - anche se non ha ordinato questa opzione (OK, il codice racconta un'altra storia - ma pensiamo a cosa voleva l'utente) 
C'è un comando a una riga rimuovere la femmina dal calcolo della media, ma scrivere i valori nelle rispettive righe con "femmina"?
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt << New Column("mean1", Formula(Col Mean(:weight, :age)));
dt << New Column("mean2", Formula(Col Mean(:weight, :age, :sex)));
dt << New Column("mean2", Formula(If(:sex=="M", Col Mean(:weight, :age, :sex))));
dtM = dt << subset( Rows( dt << get rows where( :sex== "M" ) ), selected columns( 0 ));
dtM << New Column("mean_M", Formula(Col Mean(:weight, :age)));
dt << Update(
With( dtM ),
Match Columns(:age = :age ),
Add Columns from Update Table( :mean_M ),
Replace Columns in Main Table( None )
);
Re: Come utilizzo la formula Col Maximum con una condizione "where".Grazie.Re: Come utilizzo la formula Col Maximum con una condizione "where".Col Maximum() è praticabile solo in una formula, dove un risultato di separazione per riga è l'output.Per fare quello che vuoi, usa la funzione Summarize().
Vedere:
Aiuto==>Indice scripting==>Riassumi
Re: Come utilizzo la formula Col Maximum con una condizione "where".Ciao Mark,
ha cercato di ottenere il peso massimo in base all'età o al sesso, ma produce solo un valore nello script seguente.
per età, c'erano 6 età diverse, per ognuna di esse, vorrei calcolare il peso massimo per ogni età.
Names Default To Here( 1 );
Clear Log();
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
max_weight_by_age = Col Max( :weight, :age );
max_weight_by_sex = Col Max( :weight, :sex );
Re: Come utilizzo la formula Col Maximum con una condizione "where".Potrei aggiungere questa formula a una nuova colonna nella tabella dei dati di esempio di Big Class:
Col Max( :weight, :age )
Re: Come utilizzo la formula Col Maximum con una condizione "where".Ciao Mark,
Puoi fare un esempio su come usare quando usi col Max?
Grazie.Re: Come utilizzo la formula Col Maximum con una condizione "where".Vedere Guida > Indice script > Funzioni:

Re: Come utilizzo la formula Col Maximum con una condizione "where".Grazie Jim, intendevo solo riassumere. Come lo faccio è (due comandi jsl):
Riepiloga sulla colonna, crea una nuova tabella con i valori (min/max/o qualsiasi altra statistica per la colonna).
Quindi aggiorno la tabella principale utilizzando la tabella riassuntiva abbinando le voci di riga.
Ero solo curioso di sapere se esiste un'opzione condizionale nel comando Max col() che può identificare valori di colonna univoci ed eliminare la necessità di questo passaggio aggiuntivo. (eliminerebbe un tavolo in più e 2 passaggi in più).
Apprezzo il tuo aiuto.
Re: Come utilizzo la formula Col Maximum con una condizione "where".In genere utilizzo la funzione Summarize(), piuttosto che la piattaforma di riepilogo, per determinare facilmente quali livelli vengono trovati all'interno di una colonna.Quindi, da lì, devi solo generare la formula di cui hai bisogno per portare a termine il lavoro.
Re: Come utilizzo la formula Col Maximum con una condizione "where".Supponiamo che la colonna del paese abbia diversi nomi e io non conosca tutti i possibili valori. Come può questa query essere ottimizzata per farlo.
Posso farlo creando una tabella di riepilogo e quindi aggiornando la tabella, ma sembra essere un metodo inefficace, era curioso se si potesse fare in un unico passaggio come questo.
Grazie in anticipo.
Re: Come utilizzo la formula Col Maximum con una condizione "where".Scusa per il ritardo della risposta! Grazie per la soluzione!Re: Come utilizzo la formula Col Maximum con una condizione "where".Dato il modo in cui hai dichiarato le tue esigenze, supponendo che tu sappia qual è il paese che ha le voci multiple.
dt = Current Data Table();
rowperiod = :Period[Row()];
Max(
:Value[dt << get rows where(
:Country == "A" & :period == rowperiod
)]
);