JSL - 為什麼我第一次運行腳本時會出現錯誤,但第二次運行時會出現錯誤?
第一次運行下面所示的腳本時會返回此錯誤“名稱未解析:m{36803} 訪問或評估 'm', m/*###*/”,而後續每次運行都不會返回該錯誤。為什麼是這樣?
DataCV=open("C:\Desktop\JMP\sample_CV_data.csv");
Summarize( DataCV, processArray = By( :process ) );
Summarize( DataCV, ctypeArray = By( :c_type ) );
For( n = 1, n <= Length( ctypeArray ), n++, // Generates and saves all splines by :c_type and :process
For( m = 1, m <= Length( processArray ), m++,
Eval(
Substitute(
Expr(
biv = Bivariate(
Y( :c_mm_deembed_pf ),
X( :v_dut_volt ),
Where( :c_type == __ctype__ & :process == __process__ ),
Fit Spline( 0.1, standardized, {save predicteds} )
)
),
Expr( __process__ ), processArray[m],
Expr( __ctype__ ), ctypeArray[n],
)
)
);
);
(Data Table( DataCV ) << Tabulate( // Create new table
Add Table(
Column Table( Analysis Columns( :Spline Predictor for c_mm_deembed_pf Where ) ),
Row Table( Grouping Columns(:serial_num, :process, :c_type, :v_dut_volt ) )
)
)) << Make Into Data Table;
currentDataTable()<<ADDROWS></ADDROWS>
回复:JSL - 為什麼我第一次運行腳本時會出現錯誤,但第二次運行時會出現錯誤?你有沒有嘗試過扔一個
Names default to here(1);
在腳本的開頭。
您的變量 m 可能是由另一個腳本定義的,並且它可能會干擾這裡,直到它第一次被該腳本覆蓋。
回复:JSL - 為什麼我第一次運行腳本時會出現錯誤,但第二次運行時會出現錯誤?@adjo9835你發現問題了嗎? 我也使用變量遇到此錯誤,僅在第一次運行時出現,但在第二次運行時則不然。 我正在使用 JMP 15
回复:JSL - 為什麼我第一次運行腳本時會出現錯誤,但第二次運行時會出現錯誤?謝謝! 考慮到這是我第一次使用 JMP 並且文件轉換不是典型的 JMP 應用程序,我對此感覺非常好。
僅在第一次運行腳本時,我仍然遇到相同的錯誤,如下所示。
在引發錯誤之前,該腳本甚至會從 :c_type x :processWhere 子句組合之一生成樣條線之一併將其保存到新列中。這意味著它經歷了 for 循環的一次完整迭代,如下所示:
For( n = 1, n <= Length( ctypeArray ), n++,
創建並保存到新列中的 1 個樣條線如下所示:
我將嘗試更新到 JMP 14,看看是否可以解決問題。我一直在使用 JMP 13.0.0
回复:JSL - 為什麼我第一次運行腳本時會出現錯誤,但第二次運行時會出現錯誤?非常酷的腳本!
試試這個版本
DataCV = Open( "$sample_data/big class.jmp" );
Summarize( DataCV, processArray = By( :age ) );
Summarize( DataCV, ctypeArray = By( :sex ) );
For( n = 1, n <= Length( ctypeArray ), n++,
Show( n, ctypeArray[n] );
For( m = 1, m <= Length( processArray ), m++,
Show( m, processArray[m] );
temp = Substitute(
Expr(
biv = Bivariate(
Y( :height ),
X( :weight ),
Where( :sex == __ctype__ & :age == Num( __process__ ) ),
Fit Spline( 0.1, standardized, {save predicteds} )
)
),
Expr( __process__ ), processArray[m],
Expr( __ctype__ ), ctypeArray[n],
);
Show( Name Expr( temp ) );
Eval( temp );
);
);
除了更改示例腳本並添加 NUM() 包裝器和打印中間表達式之外,我認為我沒有更改任何內容。 在 JMP 14 中,我沒有看到您描述的錯誤。
看起來數字年齡列的摘要是一個字符串列表而不是數字,因此 num 將其轉換回來。 我認為這不是您描述的原始問題的一部分。
@EvanMcCorkle
回复:JSL - 為什麼我第一次運行腳本時會出現錯誤,但第二次運行時會出現錯誤?添加:
show(m,processArray[m]);
日誌中的腳本結果顯示:
m = 1;
processArray[m] = "DVT0002B";
因此,錯誤一定是在 Eval() 內部?
數據表沒有名為“m”的列。
回复:JSL - 為什麼我第一次運行腳本時會出現錯誤,但第二次運行時會出現錯誤?首先嘗試這樣的事情。 錯誤出在那個 Eval 上嗎? 該表是否有一列名為“m”的列?
For( m = 1, m <= Length( processArray ), m++,
show(m,processArray[m]); // <<<<<<
Eval( ...
您可以進一步隔離中間變量發生的情況,以保存(並打印 nameexpr)替代結果。