使用优先级列表对缺陷进行分类我附上了 table1,其中包含 3 个输入列(零件号、产量和缺陷)和 1 个输出列(Bin)。 我还附上了另一个优先级表,说明缺陷的层次结构,其中裂纹是最重要的。
如何使用 JMP 脚本生成输出列 Bin,如果零件号有一些缺陷,则将最重要的缺陷放入与该零件号相关的所有行的 Bin 列中? 另外,如果良率低于 60% 并且缺陷不在priority_table 上,则将 bin 放入“低于 60%”?
以下是缺陷等。 缺陷列由操作员键入。

高级统计建模自动化和脚本编写数据存取大规模定制质量和工艺工程回复:使用优先级列表对缺陷进行分类知道了谢谢!
回复:使用优先级列表对缺陷进行分类您会收到相当有用的错误消息
Query failed: near "when": syntax error in access or evaluation of 'Query'
问题出在这里:
case when p.Bin is NULL then "Invalid Defect" else when t1.yield < 60 then "less than 60%" else
SQLite案例
您可以使用以下链接语句什么时候所以似乎有额外的别的那里然后是“无效缺陷”别的什么时候
回复:使用优先级列表对缺陷进行分类嗨,贾莫,
感谢您的代码。 我想更改标准和代码以确保我理解。 如果我想改变:
首要任务是
1) 不在优先级列表中的任何零件,移至名为“无效缺陷”的箱中
2) 任何部件<60%,移至名为“<60% 部件”的垃圾箱
3)比较优先级列表
我更改了如下代码,但出现语法错误:
dt_result = Query(
Table(dt_table1, "t1"),
Table(dt_priority, "p"),
"\[
with min_prio as (SELECT t1."Part No", min(p.priority) as priority
FROM t1
LEFT OUTER JOIN p
on t1.Defects like "%"||p.Bin||"%"
group by t1."Part No"
)
select t1."Part No", t1.Yield, t1.Defects, mp.priority,
case when p.Bin is NULL then "Invalid Defect" else when t1.yield < 60 then "less than 60%" else
p.Bin end as Bin
FROM t1
LEFT OUTER JOIN min_prio mp on mp."Part No" = t1."Part No"
left outer join p on mp.priority = p.priority
]\"
);
dt_result << Set Name("SQL_RESULT");回复:使用优先级列表对缺陷进行分类您也许可以更改 SQL 中的连接以使用通配符:
Names Default To Here(1);
dt_table1 = Open("Table1.jmp", Invisible);
dt_priority = Open("priority_table.jmp", Invisible);
dt_result = Query(
Table(dt_table1, "t1"),
Table(dt_priority, "p"),
"\[
with min_prio as (SELECT t1."Part No", min(p.priority) as priority
FROM t1
LEFT OUTER JOIN p
on t1.Defects like "%"||p.Bin||"%"
group by t1."Part No"
)
select t1."Part No", t1.Yield, t1.Defects, mp.priority,
case when p.Bin is NULL and t1.yield < 60 then "less than 60%" else p.Bin end as Bin
FROM t1
LEFT OUTER JOIN min_prio mp on mp."Part No" = t1."Part No"
left outer join p on mp.priority = p.priority
]\"
);
dt_result << Set Name("SQL_RESULT");
由于文本是由操作员手动输入的,因此可能会出现拼写错误,而这无法捕获它们。 对于类似的事情,您很可能必须开始在字符串之间进行某种距离计算(一个示例:编辑距离)。 在 JMP 中,您还可以使用最短编辑脚本进行“距离”计算。
文本资源管理器也许也可以帮助你,但我不熟悉该平台
回复:使用优先级列表对缺陷进行分类谢谢贾莫,
我更新了我的问题和 Table1.jmp。 缺陷栏由操作员手动输入,每个字符串中都包含缺陷词,如裂纹、纵梁等。
谢谢。
回复:使用优先级列表对缺陷进行分类我不能 100% 确定您想要如何进行匹配,但我可以猜测您将根据 Bin 值与缺陷(最后一个单词)中的匹配进行匹配。 解决这个问题的方法有很多,这里有两种可能的想法:
这是一种更具交互性的解决方案:
- 仅使用缺陷列的最后一个字向 Table1 创建新列
- 使用 Table1 中的新列和priority_table 中的 Bin 将 Table1 与priority_table 连接起来
- 使用 Col Min 公式获得零件编号的最高优先级(首先将优先级更改为数字)
- 从这里,您可以使用新的公式列和priority_table中的优先级再次加入优先级表,以获得最终的垃圾箱(丢失的垃圾箱除外)
- 创建最终公式来计算缺失值

您应该从 JMP 获取这些步骤所需的所有脚本(表脚本(以及增强日志,如果使用 JMP16))
或者如果您熟悉 SQL,您可以尝试直接使用它。 下面是某种查询:
Names Default To Here(1);
dt_table1 = Open("Table1.jmp", Invisible);
dt_priority = Open("priority_table.jmp", Invisible);
dt_result = Query(
Table(dt_table1, "t1"),
Table(dt_priority, "p"),
"\[
with min_prio as (SELECT t1."Part No", min(p.priority) as priority
FROM t1
LEFT OUTER JOIN p
ON SUBSTR(t1.Defects, LOCATE(" ", t1.defects) + 1) = p.Bin
group by t1."Part No"
)
select t1."Part No", t1.Yield, t1.Defects, mp.priority,
case when p.Bin is NULL and t1.yield < 60 then "less than 60%" else p.Bin end as Bin
FROM t1
LEFT OUTER JOIN min_prio mp on mp."Part No" = t1."Part No"
left outer join p on mp.priority = p.priority
]\"
);
dt_result << Set Name("SQL_RESULT");
