Ich versuche, eine neue Formelspalte mit Variablen zu erstellen, die zuvor im Skript berechnet wurden, aber die Formel mag die Art und Weise, wie die Variablen definiert sind, nicht. Wenn ich die Formel öffne (nachdem die Datentabelle erstellt wurde), wird der Fehler "Dieser Name ist im aktuellen Kontext vorhanden, aber nicht lokal in der Formel definiert" angezeigt.
//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));
Jede Hilfe wäre sehr dankbar!
Das Problem ist Ihre Konstruktion der Formel. Wie Sie es definieren, wird die Formel genau so gespeichert, wie Sie sie erstellen:
:"Average of Meas. Position=TopDRY" * Slope_1C + Offset_1C
Wenn die Formel ausgeführt wird, wird nach JSL-Variablen mit den Namen Slope_1C und Offset_1C gesucht. Es fällt mir schwer, mir vorzustellen, dass Sie, wenn Sie die Datentabelle speichern und später eine JMP-Sitzung starten und diese Datentabelle öffnen, JSL-Variablen mit den Namen vorhanden sind, die derzeit in Ihrem JMP verfügbar sind Session. Sie müssen also die Variablenreferenzen durch die tatsächlichen Werte der JSL-Variablen ersetzen.
:"Average of Meas. Position=TopDRY" * .5 + 3.2
Ich mache gerade die Werte für Slope_1C und Offset_1C als 0,5 bzw. 3,2.
Um dies zu tun, ist es am einfachsten, die Funktion Substitute () zu verwenden. Hier ist Ihr Skript geändert, um in Ihre Formel die tatsächlichen aktuellen Werte der JSL-Variablen zu ersetzen.
//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
)
);
Danke, das hat funktioniert!
In meinem Skript gibt es einige Punkte, an denen ich neue Spalten basierend auf zuvor in meinem Skript berechneten Variablen berechne, ähnlich der Methode in meinem ursprünglichen Beitrag. Soll ich thisEval (Substitute (für alle von mir berechneten Spalten) verwenden?