Sto cercando di creare una nuova colonna formula utilizzando le variabili che sono state calcolate in precedenza nello script, ma la formula non piace il modo in cui le variabili sono definite. Quando apro la formula (dopo che la tabella dati è stata creata) vedo questo errore "Questo nome esiste nel contesto corrente ma non è definito localmente nella formula."
//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));
Qualsiasi aiuto sarebbe molto apprezzato!
Il problema è la tua costruzione della formula. Nel modo in cui lo stai definendo, la formula verrà memorizzata esattamente nel momento in cui la crei:
:"Average of Meas. Position=TopDRY" * Slope_1C + Offset_1C
Quando la formula è in esecuzione, cercherà le variabili JSL denominate Slope_1C e Offset_1C. Per me è difficile immaginare che se salvi la tabella dei dati, e poi in futuro, avvii una sessione JMP e apri questa tabella di dati, che ci saranno variabili JSL con quei nomi attualmente disponibili nel tuo JMP sessione. Quindi, quello che devi fare è sostituire i riferimenti alle variabili con i valori effettivi delle variabili JSL, qualcosa del tipo:
:"Average of Meas. Position=TopDRY" * .5 + 3.2
Sto solo creando i valori per Slope_1C e Offset_1C come .5 e 3.2 rispettivamente.
Per fare questo, trovo che il modo più semplice per farlo è usare la funzione Sostituto (). Ecco il tuo script modificato per sostituire nella tua formula, i valori attuali attuali delle variabili 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
)
);
Grazie, ha funzionato!
Esiste un paio di punti nel mio script in cui calcolo nuove colonne basate su variabili calcolate in precedenza nel mio script, simile al metodo nel mio post originale. Dovrei usare usare thisEval (Sostituto (per tutte le colonne che calcolo (se ci sono varibles in esso)?