大家好,
我正在使用這篇文章中分享的 Dixon Q 測試 JSL 腳本。
我發現,當行被標記為「隱藏」和「排除」時,腳本會失敗,這是 JMP 用於篩選資料的標準工作流程。
問題:
- 當排除某些行時,腳本會拋出以下錯誤:
“插入空值必須針對整個行或列,才能存取或評估‘Assign’、yRow[del]”
觀察:
- 該腳本使用“Get As Matrix”提取所有行
然後嘗試刪除排除的行
這會導致“yVal”和“yRow”之間的索引不匹配。
預期行為:
腳本應遵循 JMP 行狀態(如分發平台),並且僅對未排除的行進行操作。
變通方法:
永久刪除行有效
- 子集可見行功能
然而,在需要排除行的受監管工作流程中,這兩種方法都不理想。
要求:
能否修改此腳本以正確處理排除的行?
我附上截圖供您參考。
謝謝,
將第 93 行改為
yRow = 1 :: N Row( yVal );
到
yRow = (1 :: N Row( yVal ))`;
我還沒有驗證結果是否正確,但至少它會拋出錯誤。
嗨@jthi ,
再次感謝您的幫助,問題完美解決。
如果可以的話,能否詳細解釋一下轉置「yRow」是如何解決排除行的問題的?我想更理解背後的原理。
先致謝!
問候,
賽·庫馬爾
如果列印 yval 和 yrow,你會發現它們並不相似(除非你轉置 yrow)。你也可以對矩陣使用 Dim() 函數來查看它們的差異。
//:*/
show(yval,yrow);
/*:
yval = [59, 61, 55, 66, 52, 60, 61, 51, 60, 61, 56, 65, 63, 58, 59, 61, 62, 65, 63, 62, 63, 64, 65, 64, 68, 64, 69, 62, 64, 67, 65, 66, 62, 66, 65, 60, 68, 62, 68, 70];
yrow = [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40];
然後我就根據那條還算可以接受的錯誤訊息做出了一個合理的猜測。
Inserting an empty must be to whole row or column in access or evaluation of 'Assign' , yRow[del] = /*###*/[] /*###*/
我認為即使不轉調也可以做到。
yRow[0, del] = [];
腳本編寫指南 > 資料結構 > JSL 腳本中的矩陣 > 矩陣中的下標

Dixon Q 測試是 JMP Marketplace 上的一個外掛程式。以下是運行方法:
安裝插件
- 前往 JMP Marketplace: https://marketplace.jmp.com/appdetails/Dixon+Outlier+Tests
- 下載插件,然後雙擊檔案進行安裝。
注意:此外掛程式需要 JMP 17 或更高版本 (最高支持 JMP 20)。
我在對舊腳本進行現代化改造,為 JMP Marketplace 創建擴充功能時發現了這個 bug。 (感謝@txnelson的推薦!)解決方案正是@jthi建議的那樣。