ottimizzare un'istruzione IF?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Ho un elenco di valori specifici che mi interessa identificare nel mio set di dati (valori specifici della colonna :MeasurementGroup).Ho creato una nuova colonna denominata "Valore di interesse?" con una formula per generare un indicatore: SI o NO
dt1 << Nuova colonna("Valore di interesse?",
Carattere,
Nominale,
Formula( Se(
:GruppoMisurazioni == "A", "SÌ",
:GruppoMisurazioni == "B", "SÌ",
:GruppoMisurazioni == "C", "SÌ",
:GruppoMisurazioni == "D", "SÌ",
:GruppoMisurazioni == "E", "SI",
:GruppoMisurazioni == "F", "SI",
:GruppoMisurazioni == "G", "SI",
:GruppoMisurazioni == "AA", "SÌ",
:GruppoMisurazioni == "BB", "SI",
:MeasurementGroup == "CC", "SI",
:MeasurementGroup == "ZZ", "YES",
:GruppoMisurazioni == "ABC", "SÌ",
:MeasurementGroup == "DEC", "SI",
:GruppoMisurazioni == "WSA", "SI",
:GruppoMisurazioni == "RSS", "SÌ",
:MeasurementGroup == "DVC", "SI",
:MeasurementGroup == "SFS", "SI",
:GruppoMisurazioni == "AAZ", "SÌ",
:GruppoMisurazioni == "ZZA", "SI",
:MeasurementGroup == "TTT", "SI",
"NO") )
);
Il mio datatable ha quasi 1 milione di righe... e sembra agitarsi per un po' prima di riempirsi.Esiste un modo più efficiente per ottenere lo stesso risultato?
Qualsiasi aiuto è molto apprezzato! Grazie
Ri: ottimizzare un'istruzione IF?Grazie Peter, userò questo trucco d'ora in poi quando pubblicherò.
Saluti,
Brady
Ri: ottimizzare un'istruzione IF?Sembra bello Brady!
A proposito, quando inserisco il codice, copio/incollo il JSL in un documento Word, quindi copio/incollo da lì nel forum.Ciò preserva l'aspetto dell'editor JSL.
Per esempio:
dt << Nuova colonna ( "sì/no 2" ,
formula (
Contiene ( { "UN" , "B" , "C" , "D" , "E" , "F" , "G" , "AA" , "BB" , "CC" , "ZZ" , "ABC" , "DICEMBRE" , "WSA" ,
"RSS" , "DVC" , "SFS" , "AAZ" , "ZZA" , "TTT" } , : Gruppo di misurazione
) != 0
) ,
) ;
Ri: ottimizzare un'istruzione IF?Ciao JMPBeginner,
**** Fare riferimento al file .jsl allegato per visualizzare questi script come previsto. Ho avuto problemi a visualizzare correttamente i miei post e se copi/incolli o digiti gli script visualizzati di seguito, non sono sicuro che funzioneranno. Sembrano errati quando li pubblico, ma sembrano OK quando li modifico, quindi non sono sicuro di cosa fare se non allegare un file di script. Le mie scuse!
*****
Se sei disposto a utilizzare le etichette dei valori (per tabelle di grandi dimensioni, questo può anche risparmiare molto spazio su disco), hai un altro paio di opzioni rapide:
1) Un approccio basato su formule utilizzando la funzione Contiene():
dt << Nuova colonna( "s/n 2",
formula(
Contiene (
{"A", "B", "C", "D", "E", "F", "G", "AA", "BB", "CC", "ZZ", "ABC", " DEC", "WSA", "RSS", "DVC", "SFS", "AAZ", "ZZA", "TTT"},
:Gruppo di misurazione
) != 0
),
<
);
2) Un approccio non basato su formule: JMP funziona con le tabelle molto rapidamente; la velocità di questo approccio mi ha un po' scioccato, dato che bisogna creare e chiudere una tabella completamente nuova:
dt = Tabella dati corrente();
dt2 = Nuova tabella("mt", invisibile);
Colonna( dt2, 1 ) << tipodati( carattere ) << imposta nome( "GruppoMisurazioni" ) << imposta valori(
{"A", "B", "C", "D", "E", "F", "G", "AA", "BB", "CC", "ZZ", "ABC", " DEC", "WSA", "RSS", "DVC", "SFS", "AAZ", "ZZA", "TTT"}
);
dt2 << Nuova colonna( "s/n", <
dt << Nuova colonna( "s/n", <
dt << Aggiorna( Con( dt2 ), Abbina colonne( :Measurement Group = :MeasurementGroup ), Aggiungi colonne dalla tabella Aggiorna( None ));
Colonna( dt, "y/n" ) << Aggiungi proprietà colonna( etichette valore( {0, 1}, {"NO", "SI"} ) );
Chiudi (dt2, nosave);
Su una tabella da un milione di righe, ottenevo tempi di esecuzione di ~ 2,4 secondi per la funzione Match. (Il computer di MS sembra essere più veloce del mio 
I tempi di esecuzione dell'approccio 1 di cui sopra erano di ~ 0,8 secondi, mentre i tempi di esecuzione dell'approccio 2 erano di ~ 0,4 secondi.
Saluti,
Brady
Ri: ottimizzare un'istruzione IF?Jim, grazie per la rapida risposta! Ho potuto implementare la funzione LOC e notare un immediato miglioramento della velocità!
MS, grazie per aver migliorato ulteriormente questo aspetto e avermi insegnato la funzione MATCH (e fornito il confronto della velocità)!
Ri: ottimizzare un'istruzione IF?Date un premio a quest'uomo!Questo è fantastico.
Ri: ottimizzare un'istruzione IF?La funzione Match è efficace per scelte multiple. Ho fatto un test veloce: con un milione di righe Incontro , Loc E Se completato rispettivamente in 2,1 secondi, 6,9 secondi e 10,2 secondi.
dt << Nuova colonna ( "Valore di interesse" ,
Carattere ,
Nominale ,
Formula (
Incontro ( : Gruppo di misurazione ,
"UN" , "SÌ" ,
"B" , "SÌ" ,
"C" , "SÌ" ,
"D" , "SÌ" ,
"E" , "SÌ" ,
"F" , "SÌ" ,
"G" , "SÌ" ,
"AA" , "SÌ" ,
"BB" , "SÌ" ,
"CC" , "SÌ" ,
"ZZ" , "SÌ" ,
"ABC" , "SÌ" ,
"DICEMBRE" , "SÌ" ,
"WSA" , "SÌ" ,
"RSS" , "SÌ" ,
"DVC" , "SÌ" ,
"SFS" , "SÌ" ,
"AAZ" , "SÌ" ,
"ZZA" , "SÌ" ,
"TTT" , "SÌ" ,
"NO"
)
)
) ;
Re: ottimizzare un'istruzione IF?Vorrei provare a utilizzare la funzione LOC()
if(N righe(Loc({"A","B","C","..............},MeasurementGroup))>0,"Sì","NO" )