我正在尝试使用先前在脚本中计算的变量创建新的公式列,但公式不喜欢变量的定义方式。当我打开公式时(在创建数据表之后),我看到此错误“此名称存在于当前上下文中,但未在公式中本地定义。”
//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(替换(对于我计算的所有列(如果其中有变量)?