大家好,
我正在使用这篇文章中分享的 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建议的那样。