Estoy tratando de crear una nueva columna de fórmula utilizando variables que se calcularon anteriormente en el script, pero a la fórmula no le gusta la forma en que se definen las variables. Cuando abro la fórmula (después de crear la tabla de datos), veo este error "Este nombre existe en el contexto actual pero no está definido localmente en la fórmula".
//Checks the calibration accuracy
current data table(dt_1C_comparison);
Avg_1C_grab = :"New Diff." << get values;
Avg_1C_diff = mean(Avg_1C_grab);
show(Avg_1C_diff);
offsetadjust_1Cpos = Avg_1C_diff - 0.3;
offsetadjust_1Cneg = Avg_1C_diff + 0.3;
x1C = If(
(Avg_1C_diff > 0.3), offsetadjust_1Cpos,
(Avg_1C_diff < -0.3), offsetadjust_1Cneg,
Avg_1C_diff = 0,
);
current data table(dt_1C_comparison);
//Caclulates new offset if the wet/dry difference is greater then 0.3
Offset_1C = Mean1C_intercept - x1C;
Show(Offset_1C);
New Column("Wet Avg. 2", numeric, "continuous", Format("Best", 5), Formula(:"Average of Meas. Position=TopDRY" * Slope_1C + Offset_1C));
Cualquier ayuda sería muy apreciada!
El tema es tu construcción de la fórmula. De la forma en que lo define, la fórmula se almacenará exactamente a medida que la crea:
:"Average of Meas. Position=TopDRY" * Slope_1C + Offset_1C
Cuando se ejecute la fórmula, buscará variables JSL denominadas Slope_1C y Offset_1C. Es difícil para mí imaginar que si guarda la tabla de datos, y luego, en algún momento en el futuro, inicia una sesión JMP y abre esta tabla de datos, que habrá variables JSL con los nombres actualmente disponibles en su JMP. sesión. Entonces, lo que debe hacer es reemplazar las referencias de variables por los valores reales de las variables JSL, algo así como:
:"Average of Meas. Position=TopDRY" * .5 + 3.2
Solo estoy inventando los valores de Slope_1C y Offset_1C como .5 y 3.2 respectivamente.
Para hacer esto, la forma más fácil de hacerlo es usar la función Substitute (). Aquí está su script modificado para sustituir en su fórmula, los valores actuales reales de las variables JSL.
//Checks the calibration accuracy
Current Data Table( dt_1C_comparison );
Avg_1C_grab = :"New Diff." << get values;
Avg_1C_diff = Mean( Avg_1C_grab );
Show( Avg_1C_diff );
offsetadjust_1Cpos = Avg_1C_diff - 0.3;
offsetadjust_1Cneg = Avg_1C_diff + 0.3;
x1C = If(
(Avg_1C_diff > 0.3), offsetadjust_1Cpos,
(Avg_1C_diff < -0.3), offsetadjust_1Cneg,
Avg_1C_diff = 0,
);
Current Data Table( dt_1C_comparison );
//Caclulates new offset if the wet/dry difference is greater then 0.3
Offset_1C = Mean1C_intercept - x1C;
Show( Offset_1C );
Eval(
Substitute(
Expr(
New Column( "Wet Avg. 2",
numeric,
"continuous",
Format( "Best", 5 ),
Formula( :Name("Average of Meas. Position=TopDRY") * __Slope_1C__ + __Offset_1C__ )
)
),
Expr( __Slope_1C__ ), Slope_1C,
Expr( __Offset_1C__ ), Offset_1C
)
);
Gracias que funcionó!
Hay un par de puntos en mi script donde calculo nuevas columnas basadas en variables calculadas anteriormente en mi script, similar al método en mi publicación original. ¿Debo usar estar usando thisEval (Sustituir (para todas las columnas que calculo (si hay variables))?