¿Cuál es la mejor manera de calcular con variables de tabla y columnas?Un script JSL (TestJSL) crea dos variables de tabla. Dentro del script, se utilizan para calcular una nueva columna: D1 a partir de la columna existente: D0 aplicando estados IF, etc.
¿Hay una mejor manera de hacer esto que con la fórmula bastante compleja para :D1?
Re: ¿Cuál es la mejor manera de calcular con variables de tabla y columnas?Gracias de nuevo. Ahora funciona, ejecutando el script de actualización. El encanto de la fórmula es que la actualización de datos se realiza automáticamente. ¿Es arriesgado hacer esto con la fórmula para unas 100k filas (evitando errores….)? Si sigo con la fórmula, ¿sería mejor generar una columna: DT en la que se calcula la primera parte If (: P1 == 0 &: P2 <: Threshold,: D0) ¿Cómo sería un script en caso de que exista? son varias: D0a :D0b columnas para generar las correspondientes : D1a, .D1b columnas?
Re: ¿Cuál es la mejor manera de calcular con variables de tabla y columnas?Bueno, tu fórmula funcionó, así que podrías usar eso. Estoy de acuerdo en que la fórmula es difícil de mantener.
Aquí hay una alternativa, agregue un script a la tabla. Agregué el JSL (después de la espera (5)) que muestra cómo cambiar el cuantil y el umbral y ejecutar el script. O de forma interactiva, cambie las 2 variables y haga clic en Actualizar D1.
Use el método que le resulte más fácil de usar.
//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: ¿Cuál es la mejor manera de calcular con variables de tabla y columnas?Gracias por tu solución. Funciona bien. Sin embargo, después de que se ejecutó el JSL y reajusté la variable de tabla "Cuantil" y "Umbral", la nueva columna: D1 solo responde a los cambios en "Umbral" y no a los cambios en "Cuantil". ¿Se puede arreglar esto?
@gzmorgan0 escribió:
Hay varias formas de hacer esto sin tener una fórmula de tabla y variables de tabla usando valores establecidos.
Dado que su secuencia de comandos usó una fórmula, este JSL alternativo usa una fórmula. Si puede arreglárselas sin una fórmula de columna, se pueden usar otros métodos, incluido un script para solicitar el cuantil, el umbral y luego volver a calcular qq y volver a calcular 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) )
);
Gracias por tu solución. Funciona bien. Sin embargo, después de que se ejecutó el JSL y reajusté la variable de tabla "Cuantil" y "Umbral", la nueva columna: D1 solo responde a los cambios en "Umbral" y no a los cambios en "Cuantil".
Re: ¿Cuál es la mejor manera de calcular con variables de tabla y columnas?Hay varias formas de hacer esto sin tener una fórmula de tabla y variables de tabla usando valores establecidos.
Dado que su secuencia de comandos usó una fórmula, este JSL alternativo usa una fórmula. Si puede arreglárselas sin una fórmula de columna, se pueden usar otros métodos, incluido un script para solicitar el cuantil, el umbral y luego volver a calcular qq y volver a calcular 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) )
);