C'è una serie di post con domande su come limitare il Col... aggregazione funzioni a uno specifico sottoinsieme.
https://community.jmp.com/t5/Discussions/Compute-Column-Mean-while-restricting-observations-used/mp...
https://community.jmp.com/t5/Discussions/JMP10-Col-Max-and-Col-Min-functions-returned-the-data-from/...
https://community.jmp.com/t5/Discussions/Col-Functions-and-Row-States/td-p/351705
https://community.jmp.com/t5/Discussions/How-do-I-use-the-Col-Maximum-Formula-with-a-quot-where-quot/mp/34840
https://community.jmp.com/t5/Discussions/Col-Functions-and-Row-States/mp/351705
https://community.jmp.com/t5/Discussions/Exclude-data-in-formula/td-p/512366
Casi applicativi:
- Escludere escluso righe dall'aggregazione:
Col Max(if(not(excluded()), :weight,.),: sex)
o anche più breve (se non servono valori nelle righe escluse);
Col Max(:weight, :sex, :excluded())
- Confronta alcuni dati con un set di dati di riferimento (paese A in questo inviare)
:data / Col Maximum(if(:country="A", :data,.))
Come si può vedere negli esempi sopra, la soluzione facile è an Se dichiarazione all'interno del Col xyz aggregazione:
col Mean( if(:sex=="M", :weight,.), :age)
col Mean( if(not(excluded()), :weight,.), :age)
Il problema:
L'approccio è ESTREMAMENTE lento - se il sottoinsieme Se -condizione contiene un confronto di stringhe:
https://community.jmp.com/t5/Discussions/How-do-I-use-the-Col-Maximum-Formula-with-a-quot-where-quot/mp/578576/highlight/true#M78599
Quindi il tempo scala quadraticamente con il numero di righe e anche per piccoli set di dati con solo poche 1000 voci il calcolo richiede secondi .
Per set di dati con alcuni milioni di voci ci vorrebbe mesi (!!!) - ma verrà interrotto da un timeout e verrà visualizzato un messaggio di errore. Non bello!
Il mio desiderio:
correggere il bug
Anche meglio:
Fornire un ulteriore dove opzione per Col xyz aggregazioni
- che risolve automaticamente il problema di temporizzazione: primo limita il set di dati, quindi applica l'aggregazione (--> molto più veloce, anche se l'ottimo "col..." speedup ha un bug)
- che semplificano le definizioni dei sottoinsiemi,
invece di (*), hai solo bisogno di:
col Mean(:weight, :age, where(:sex=="M"))
col Mean(:weight, :age, where(not(excluded())))
esempi di temporizzazione, copiati da https://community.jmp.com/t5/Discussions/How-do-I-use-the-Col-Maximum-Formula-with-a-quot-where-quot/mp/578576/highlight/true#M78599
