Qual è il modo migliore per calcolare con le variabili e le colonne della tabella?Uno script JSL (TestJSL) crea due variabili di tabella. All'interno dello script vengono utilizzati per calcolare una nuova colonna :D1 dalla colonna esistente :D0 applicando stati IF ecc.
C'è un modo migliore per farlo, che con la formula piuttosto complessa per :D1?
Re: Qual è il modo migliore per calcolare con le variabili e le colonne della tabella?Grazie ancora. Ora funziona, eseguendo lo script di aggiornamento. Il fascino della formula è che l'aggiornamento dei dati viene eseguito automaticamente. È rischioso farlo con la formula per circa 100.000 righe (evitando errori….)? Se mi attengo alla formula sarebbe meglio generare una colonna :DT in cui viene calcolata la prima parte If( :P1 == 0 & :P2 < :Threshold, :D0 ) Come sarebbe uno script nel caso in cui ci fosse sono diverse: D0a :D0b colonne per generare le corrispondenti colonne : D1a, .D1b?
Re: Qual è il modo migliore per calcolare con le variabili e le colonne della tabella?Bene, la tua formula ha funzionato, quindi potresti usarla. Sono d'accordo che la formula è difficile da mantenere.
Ecco un'alternativa, aggiungi uno script alla tabella. Ho aggiunto il JSL (dopo il wait(5) ) che mostra come modificare il quantile e la soglia ed eseguire lo script. Oppure in modo interattivo, cambia le 2 variabili e clicca su Aggiorna D1.
Usa il metodo che ritieni più facile da usare.
//Create Table Variable
dt = currentdatatable();
dt << Set Table Variable( "Quantile", 0.9 );
dt << Set Table Variable( "Threshold", 1 );
dt << New Column("D1", Numeric, Continuous);
dt << New Script ("Update D1",
dt = current data table();
_xx = dt << get rows where(:P1 ==0 & :P2 <:Threshold);
dt << Set Table Variable("QQ", Quantile(dt:Quantile, dt:D0[_xx] ));
qq = Quantile(dt:Quantile, dt:D0[_xx] );
//caption(char(qq)); wait(2); caption(remove); //uncomment to test
dt:D1 << Set Each Value(
If(:P1 ==0 & :P2 <:Threshold & :D0< qq, :D0, empty())
);
);
wait(5);
dt << Set Table Variable( "Quantile", 0.6 );
dt << Set Table Variable( "Threshold", 1.8 );
dt << Run Script("Update D1") ;
Re: Qual è il modo migliore per calcolare con le variabili e le colonne della tabella?Grazie per la tua soluzione. Funziona bene. Tuttavia, dopo che il JSL è stato eseguito e ho riadattato le variabili della tabella "Quantile" e "Threshold", la nuova colonna: D1 risponde solo alle modifiche su "Threshold" e non alle modifiche su "Quantile". Potrebbe essere risolto?
@gzmorgan0 ha scritto:
Esistono diversi modi per farlo senza avere una formula di tabella e variabili di tabella che utilizzano valori impostati.
Poiché il tuo script utilizzava una formula, questo JSL alternativo utilizza una formula. Se riesci a cavartela senza una formula di colonna, è possibile utilizzare altri metodi, incluso uno script per richiedere quantile, soglia, quindi ricalcolare qq e ricalcolare D1.
//Create Table Variable
dt = currentdatatable();
dt << Set Table Variable( "Quantile", 0.9 );
dt << Set Table Variable( "Threshold", 1 );
_xx = dt << get rows where(:P1 ==0 & :P2 <:Threshold);
dt << Set Table Variable("QQ", Quantile(dt:Quantile, dt:D0[_xx] ));
dt << New Column("D1", Numeric, Continuous,
Formula( If(:P1 ==0 & :P2 <:Threshold & :D0< :QQ, :D0) )
);
Grazie per la tua soluzione. Funziona bene. Tuttavia, dopo che il JSL è stato eseguito e ho riadattato le variabili della tabella "Quantile" e "Threshold", la nuova colonna: D1 risponde solo alle modifiche su "Threshold" e non alle modifiche su "Quantile".
Re: Qual è il modo migliore per calcolare con le variabili e le colonne della tabella?Esistono diversi modi per farlo senza avere una formula di tabella e variabili di tabella che utilizzano valori impostati.
Poiché il tuo script utilizzava una formula, questo JSL alternativo utilizza una formula. Se riesci a cavartela senza una formula di colonna, è possibile utilizzare altri metodi, incluso uno script per richiedere quantile, soglia, quindi ricalcolare qq e ricalcolare D1.
//Create Table Variable
dt = currentdatatable();
dt << Set Table Variable( "Quantile", 0.9 );
dt << Set Table Variable( "Threshold", 1 );
_xx = dt << get rows where(:P1 ==0 & :P2 <:Threshold);
dt << Set Table Variable("QQ", Quantile(dt:Quantile, dt:D0[_xx] ));
dt << New Column("D1", Numeric, Continuous,
Formula( If(:P1 ==0 & :P2 <:Threshold & :D0< :QQ, :D0) )
);