以为我在上一篇文章中找到了一个解决方案,但事实证明问题比我想象的要复杂得多。我根据我的一个列中包含的值创建了一个字符串数组。 然后,我想循环遍历Bivariate()函数,迭代数组值,同时将它们传递给Where子句。 当我运行脚本时,Splines会正确生成,但是{save predicts}命令无法正常运行。 保存的唯一预测属于数组的最后一个元素,而不是其他元素。 似乎{save predicts}只运行一次,在我的for循环结束时/仅用于ProcessArray的最后一个元素,而不是运行for循环/ ProcessArray的每个元素的迭代。
l = 0;
Proc = "new";
ProcessArray = {};
DataCV=open("C:\Desktop\JMP\sample_data.csv")<BR />
For (l = 1, l < 32521, l++, // Create array of strings
if (proc == (Row()=l; :process),
print("same process"),
Insert Into(processArray, (Row()=l; :process)); proc = (Row()=l; :process); Show(proc)
);
);
for (n = 1, n <= length(processArray), n++, // Create and save multiple splines, for all values of ProcessArray[]
Bivariate(
Y( :c_mm_deembed_pf ),
X( :v_dut_volt ),
Where( :c_type == "Cdg" & :process == ProcessArray[n] ),
Fit Spline( 0.1, standardized, {save predicteds})
);
);

@ adjo9835 ,
在使用Where()子句时指定Save Predicted时,生成的预测公式将如下所示

这是使用Where()子句的硬编码where值创建的。如果您查看每个双变量窗口上的标题,请说明:
Where( :c_type == "Cdg" & :process == ProcessArray[n] )
JMP将正确计算样条曲线,但它不会替代ProcessArray [n]的值。
我建议你修改Bivariate循环
for (n = 1, n <= length(ProcessArray), n++, // Create and save multiple splines, for all values of ProcessArray[]
Eval( EvalExpr( Bivariate(
Y( :c_mm_deembed_pf ),
X( :v_dut_volt ),
Where( :c_type == "Cdg" & :process == Expr(ProcessArray[n] ) ),
Fit Spline( 0.1, standardized, {save predicteds})
) ) );
); //end for
另外,如果要在column:process中获取唯一值列表,可以使用Summarize()或Associative Array()完成它。 请使用JMP示例数据表查看下面的脚本。
Names Default to Here(1);
dt = Open("$Sample_Data/SATByYear.jmp");
r_aa = (Associative Array(:Region)) << get keys;
show(r_aa);
summarize( rarray = By(:Region));
show(rarray);
for(n=1, n <= nitems(rarray), n++,
Eval (EvalExpr(
Bivariate(
Y( :SAT Math),
X( :Year),
Where( :Region == Expr( rarray[n] ) ),
Fit Spline( 0.1, standardized, {save predicteds})
)
))
);