Come ottenere valori massimi su più colonne con dati mancanti nelle loro righe!CIAO,
Diciamo che abbiamo un set di dati che vogliamo ottenere valori massimi attraverso le colonne selezionate
dt = New Table( "Untitled",
New Column( "a@b;2", Numeric, Set Values( [12, 33, 1] ) ),
New Column( "b", Numeric, Set Values( [2, 11, 2] ) ),
New Column( "c@d;3", Numeric, Set Values( [333, 1, 0] ) )
);
colnames = dt << getcolumnnames;
use_cols = {};
include = {"@"};
For( j = 1, j <= N Items( include ), j++,
For( i = 1, i <= Nitems( colnames ), i++,
If(Contains(colnames[i], include[j]),
insert into (use_cols , colnames[i]))
));
dt << new column("max_col",numeric,formula(Maximum(use_cols)))
Non capisco perché restituisce il valore mancante in max_col ? Dovremmo scorrere use_cols ?
Grazie!
Tabella datiAltroScriptingRi: Come ottenere valori massimi su più colonne con dati mancanti nelle loro righe!Scusa! questo non ha funzionato!Ri: Come ottenere valori massimi su più colonne con dati mancanti nelle loro righe!Grazie txnelson per la tua fantastica soluzione! Sei sempre utile per andare nei dettagli e spiegare le cose in modo molto chiaro!Ri: Come ottenere valori massimi su più colonne con dati mancanti nelle loro righe!In esecuzione su un PC Windows, con Windows 10 in esecuzione, sono tornato a diverse versioni di JMP ed ho eseguito il tuo script, che ha funzionato correttamente su tutte le versioni.

La tua seconda qualifica, che a volte hai valori mancanti nei tuoi dati non dovrebbe essere un problema.La funzione Maximum() gestisce i valori mancanti.
Non sapendo di più sulla tua sceneggiatura, ti segnalerò un possibile problema.Se guardi la formula creata per la colonna max_col vedrai:

La formula si basa sull'elenco "use_cols", quindi ogni volta che la formula viene eseguita o rieseguita, va all'elenco e utilizza il valore "in quel momento" di "use_cols" e lo inserisce nella formula.Se il valore di "use_cols" è " {Nome( "a@b;2" ), Nome( "c@d;3" )} ", tutto funzionerà bene.Se per qualche motivo l'elenco "use_cols" ha cambiato il suo valore, la formula potrebbe non funzionare e otterrai valori mancanti.Quello che vuoi veramente è che la formula sia
Maximum( {:Name( "a@b;2" ), :Name( "c@d;3" )} )
Il modo più semplice per farlo, secondo la mia esperienza, è specificare la nuova colonna e formula come:
Eval(Parse("dt << new column(\!"max_col\!",numeric,formula( Maximum(" || char(use_cols) || ")));"));
Ne risulta che la formula viene specificata come:

Ri: Come ottenere valori massimi su più colonne con dati mancanti nelle loro righe!CIAO,
Devi solo aiutare JMP a capire che la variabile "use_cols" si riferisce alle colonne aggiungendo "as columns" alla tua ultima istruzione:
dt << New Column( "max_col", numeric, formula( Maximum( as columns( use_cols ) ) ) );
Ri: Come ottenere valori massimi su più colonne con dati mancanti nelle loro righe!Ho dimenticato di aggiungere a volte anche le colonne possono contenere valori mancanti. Non sono riuscito a capire come aggiungerli quando ho creato la tabella dei dati.