以為我在上一篇文章中找到了一個解決方案,但事實證明問題比我想像的要復雜得多。我根據我的一個列中包含的值創建了一個字符串數組。 然後,我想循環遍歷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})
)
))
);