查找连续的列和行你好,
附件是 PART-02 和 PART-03 这两个部分的数据表。每个部分都有自己的列和行 (ColX、RowY)。我希望使用 JSL 来识别连续出现超过 4 次的列或行的部分。这里的 PART-02 是连续出现超过 4 次的行的部分。我希望我的输出只是一个带有 PART ID 的表格,结果如下所示。


自动化和脚本回复:查找连续的列和行以下是我想出的 JSL,用于创建新表并按照您的指定进行填充
Names Default To Here( 1 );
dt = Current Data Table();
dtResults = dt <<
summary(
group( :LotLabel, :WaferLabel ),
output table( "Results" ),
Link to Original Data Table( 0 )
);
dtResults << delete columns( :N Rows );
dtResults << New Column( "Results",
character,
set each value( "FAIL" )
);
For Each Row(
dt,
If( Row() >= 4,
If(
Col Moving Average(
:ColX,
weighting = 1,
before = -3,
after = 0,
:LotLabel,
:WaferLabel
) == :ColX |
Col Moving Average(
:RowY,
weighting = 1,
before = -3,
after = 0,
:LotLabel,
:WaferLabel
) == :RowY,
dtResults:Results[dtResults << get rows where(
dtResults:LotLabel == dt:LotLabel &
dtResults:WaferLabel == dt:WaferLabel
)] = "PASS"
)
)
);

回复:查找连续的列和行嗨,Jim,在之前的数据集中,对于 PART-01,02 应该通过。抱歉,信息有误。附件是一个更大的数据集,包括 PART-01、02、03、17。Part-01、02、03 应该通过,只有 PART-17 应该失败。它应该如下所示,但您的脚本表明 PART02、03 也失败了。

回复:查找连续的列和行是的,您需要将 4 改为 7,将 -3 改为 -6。
加权因子提供了设置每个值的平均权重的能力。值为 1 表示对每个值使用相等的权重。
之前 = 设置在计算移动平均值时使用的当前行之前的行数。
After = 设置用于计算移动平均值的当前行之后的行数。
最后,在讨论中输入 JSL 时,请使用预览顶部的 JSL 图标。它确实有助于读者阅读和解释代码。
我已编辑了您的上一条回复,并将您列出的 JSL 移至 JSL 显示框中
回复:查找连续的列和行嗨,Jim,在之前的数据集中,对于 PART-01,02 应该通过。抱歉,信息有误。附件是一个更大的数据集,包括 PART-01、02、03、17。Part-01、02、03 应该通过,只有 PART-17 应该失败。它应该如下所示,但您的脚本表明 PART02、03 也失败了。

回复:查找连续的列和行- 使用 Col 移动平均线进行检查没有效果,因此我将其改为使用 7 行上的标准差。
- 我用来查找 dtResults 数据表中的行的方法不起作用。我不得不改用 For() 循环才能获得所需的准确性。
- 我的逻辑是倒退的.....如果找到一行中的值则通过,而不是当发生这种情况时失败。
Names Default To Here( 1 );
dt = Current Data Table();
dtResults = dt << summary(
group( :LotLabel, :WaferLabel ),
output table( "Results" ),
Link to Original Data Table( 0 )
);
dtResults << delete columns( :N Rows );
dtResults << New Column( "Results",
character,
set each value( "PASS" )
);
For( i = 1, i <= N Rows( dt ), i++,
If( i >= 7,
If(
Std Dev( dt:ColX[i - 6 :: i] ) == 0 |
Std Dev( dt:RowY[i - 6 :: i] ) == 0,
dtResults:Results[dtResults <<
get rows where(
dtResults:LotLabel == dt:LotLabel[i] & dtResults
:WaferLabel == dt:WaferLabel[i]
)] = "FAIL"
)
)
);
您需要研究代码,不要只是将其剪切并粘贴到脚本中。您需要有足够的知识才能调试未来的问题并生成修复程序。
回复:查找连续的列和行谢谢,吉姆。经过一些调整后,它对我来说就起作用了。