我正在嘗試使用先前在腳本中計算的變量創建新的公式列,但公式不喜歡變量的定義方式。當我打開公式時(在創建數據表之後),我看到此錯誤“此名稱存在於當前上下文中,但未在公式中本地定義。”
//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));
任何幫助將不勝感激!
問題是你的公式的構建。 您定義它的方式,公式將完全按照您創建它的方式存儲:
:"Average of Meas. Position=TopDRY" * Slope_1C + Offset_1C
當公式運行時,它將查找名為Slope_1C和Offset_1C的JSL變量。 如果您保存數據表,那麼我很難對其進行映像,然後在將來的某個時間啟動JMP會話,並打開此數據表,JMP變量將由您當前在JMP中可用的名稱生成會話。 所以你需要做的是用JSL變量的實際值替換變量引用,例如:
:"Average of Meas. Position=TopDRY" * .5 + 3.2
我只是將Slope_1C和Offset_1C的值分別設為.5和3.2。
為此,我發現最簡單的方法是使用Substitute()函數。 這是您修改的腳本,以替換您的公式,即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
)
);
謝謝你的工作!
在我的腳本中有幾點我根據我的腳本中先前計算的變量計算新列,類似於我原始帖子中的方法。我應該使用thisEval(替換(對於我計算的所有列(如果其中有變量)?