如何在异常值过滤后获得每个参数的 Ppk 和每个晶圆每个参数的 Cpk?我整理了以下 JSL,首先过滤数据中的异常值,然后获取 Ppk,但我注意到我的脚本不正确,因为当我通过排除所有行来过滤异常值时,我会排除其他过程参数的非异常值数据点。
对于定义异常值, 我喜欢的标准是Q1/Q3 +/- 1.5xIQR 之外的任何值都是异常值,这就是(我认为)我在下面使用的。
Names Default To Here (1);
Clear Log ();
dt = Open( "$SAMPLE_DATA/Semiconductor Capability.jmp" );
col_names = dt << Get Column Group("Processes"); // Column Group should pre-exist.
obj = Explore Outliers(Y(Eval( col_names ) )); // Run expolore outliers
obj << Quantile Range Outliers( Tail Quantile( 0.25 ), Q (1.5) ); // select Q3/Q1 +/- 1.5 x IQR
obj << Exclude Rows(ALL); // exclude OL rows
// Run capability analysis
platform = dt << Process Capability(
Process Variables( Eval( col_names ) ),
Spec Limits Dialog( "No (skip columns with no spec limits)" ),
Moving Range Method( Average of Moving Ranges ),
Overall Sigma Summary Report( 1 ),
//Spec Limits Dialog( "No (skip columns with no spec limits)" ),
Select Out of Spec Values( 1 ),
Goal Plot(0 ),
Capability Index Plot( 1 ),
Process Performance Plot( 0 ),
Order By( "Within Sigma Ppk Ascending" )
);
Wait( 0 );
Report( platform )[Outline Box( "Process Capability" )][Outline Box( "Overall Sigma Capability Summary Report" )][Table Box( 1 )] <<
Make Into Data Table;
dt_curr = Current Data Table();
dt_curr << Set Name( "Capability Report" );我可以为每个参数的异常值单元格着色,但不知道如何在能力分析中排除它们。我需要一些帮助。
其次,对于一批晶圆中的每块晶圆,我想在过滤异常值后计算每个工艺参数的 Cpk,从而得到每个工艺参数的晶圆 Cpk 趋势图。如何通过 JSL 执行此操作(使用我在脚本中获得的示例数据集)?
自动化和脚本视窗回复:如何在异常值过滤后获取每个参数的 Ppk 和每个晶圆每个参数的 Cpk?对于我的问题的第一部分(Ppk),交换
obj << Exclude Rows(ALL);
经过
obj << Change to Missing(ALL);
做这个工作?
回复:如何在异常值过滤后获取每个参数的 Ppk 和每个晶圆每个参数的 Cpk?因为您有宽格式表,所以您必须将它们更改为缺失(使用缺失值代码或修改数据)或堆叠数据以便能够排除行。
您是否尝试过“如果<<更改为缺失>”来实现您所寻找的功能?

回复:如何在异常值过滤后获取每个参数的 Ppk 和每个晶圆每个参数的 Cpk?@jthi我觉得我们搞错了。更改为缺失值会给我带来一些参数的负 Ppk - 这是预期的吗?

回复:如何在异常值过滤后获取每个参数的 Ppk 和每个晶圆每个参数的 Cpk?创建一个包含异常值的单列,您可以手动(和使用 JMP)计算其 Ppk。将异常值更改为缺失值,重复计算。它们正确吗?
如果我只取第一个参数并检查它是什么样子

我想说有人应该对此做出某种反应。您还可以很容易地看到为什么存在负能力值(平均值超出规格)。
回复:如何在异常值过滤后获取每个参数的 Ppk 和每个晶圆每个参数的 Cpk?@jthi谢谢。我的理解是 Ppk 不能为负数,而 Cpk 可以为负数,因此我对“更改为缺失值”步骤表示怀疑。我会检查我的理解。在继续回答问题的第二部分之前,还有一件事 - 我是否正确应用了异常值过滤标准(即Q1/Q3 +/- 1.5xIQR之外的过滤器)?
回复:如何在异常值过滤后获取每个参数的 Ppk 和每个晶圆每个参数的 Cpk?如果您能找到正确的位置,JMP 文档可以为您提供此类问题的最佳答案。有时这可能相当困难。
在这种情况下,最有可能的是此处预测和专业建模 > 探索异常值 > 探索异常值概述 > 分位数范围异常值或此处预测和专业建模 > 探索异常值 > 探索异常值报告 > 分位数范围异常值报告

回复:如何在异常值过滤后获取每个参数的 Ppk 和每个晶圆每个参数的 Cpk?@jthi谢谢,现在来讨论我的问题的第二部分。
对于同一批次中的每个晶圆,我想计算每个工艺参数的 Cpk经过异常值过滤,获得每个工艺参数的晶圆的 Cpk 趋势图。
因此,这不是数据表中所有晶圆的参数能力,而是给定批次中一个晶圆的参数能力。
如何通过 JSL 对我此处的同一数据集执行此操作?
回复:如何在异常值过滤后获取每个参数的 Ppk 和每个晶圆每个参数的 Cpk?分组变量不应该让你根据需要使用 :lot_id、:wafer 和/或 :wafer in lot 获得该表吗?然后你就可以从该表中创建一个图表
回复:如何在异常值过滤后获取每个参数的 Ppk 和每个晶圆每个参数的 Cpk?@jthi谢谢。如果我使用
Names Default To Here (1);
Clear Log ();
dt = Open( "$SAMPLE_DATA/Semiconductor Capability.jmp" );
col_names = dt << Get Column Group("Processes"); // Column Group should pre-exist.
obj = Explore Outliers(Y(Eval( col_names )),By( :Wafer ID in lot ID)); // Run expolore outliers
obj << Quantile Range Outliers( Tail Quantile( 0.25 ), Q (1.5) ); // select Q3/Q1 +/- 1.5 x IQR<BR />我打开了探索异常值平台窗口,可以单独处理晶圆。然后我如何使用
obj << Change to Missing(ALL);
是否进入下一步,即根据“批次 ID 中的晶圆 ID”进行能力分析?
回复:如何在异常值过滤后获取每个参数的 Ppk 和每个晶圆每个参数的 Cpk?我认为这应该没问题。你确定你的数据中存在任何异常值吗?
- 采用更小的数据集(批次 ID 中只有少数晶圆 ID)
- 在某一列中创建一些异常值
- 运行脚本
- 验证其是否有效
- 使用更大的数据重复
请注意,我已更改尾部分位数
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
eo = dt << Explore Outliers(Y(Column Group("Processes")), By(:Wafer ID in lot ID), Invisible);
eo << Quantile Range Outliers(Tail Quantile(0.4), Q(1.5));
dt << Begin Data Update;
// eo << Color Cells(All);
Log Capture(eo << Change to Missing(ALL));
dt << End Data Update;
eo[1] << Close Window;回复:如何在异常值过滤后获取每个参数的 Ppk 和每个晶圆每个参数的 Cpk?@jthi谢谢,我现在使用了一个较小的数据集进行分析(下面的 JSL)。我认为没有必要根据批次 ID中的晶圆 ID 过滤异常值,因为异常值单元无论如何都会丢失。我需要的是对异常值过滤数据集进行能力分析。
Names Default To Here( 1 );
Clear Log();
dt_full = Open( "$SAMPLE_DATA/Semiconductor Capability.jmp" );
dt = Data Table( "Semiconductor Capability" ) << Subset(
All rows,
columns( :lot_id, :wafer, :Wafer ID in lot ID, :SITE, :NPN1, :PNP2, :PNP3, :FNM1, :RES3, RSP2 )
);
Wait( 1 );
Close( dt_full, no save );
col_names = dt << Get Column Group( "Processes" ); // Column Group should pre-exist.
obj = Explore Outliers( Y( Eval( col_names ) ) );//,By( :Wafer ID in lot ID)); // Run expolore outliers
obj << Quantile Range Outliers( Tail Quantile( 0.25 ), Q( 1.5 ) ); // select Q3/Q1 +/- 1.5 x IQR
obj << Color Cells( ALL ); //check
Wait( 1 );
obj << Change to Missing( ALL );
Wait( 1 );
obj << Close Window;
// Run capability analysis
platform = dt << Process Capability(
Process Variables( Eval( col_names ) ),
Spec Limits Dialog( "No (skip columns with no spec limits)" ),
Moving Range Method( Average of Moving Ranges ),
//Within Sigma Summary Report( 0),
Overall Sigma Summary Report( 1 ),
Select Out of Spec Values( 1 ),
Goal Plot( 0 ),
Capability Index Plot( 0 ),
Capability Box Plots( 0 ),
Process Performance Plot( 0 ),
Order By( "Overall Sigma Ppk Ascending" )
);
Wait( 0 );
Report( platform )[Outline Box( "Process Capability" )][Outline Box( "Overall Sigma Capability Summary Report" )][Table Box( 1 )] <<
Make Into Data Table;
dt_curr = Current Data Table();
dt_curr << Set Name( "Capability Report" );
platform << close window;
dt << Clear Select;
// Run capability analysis by wafer in a lot
platform2 = dt << Process Capability(
Process Variables( Eval( col_names ) ),
Spec Limits Dialog( "No (skip columns with no spec limits)" ),
Moving Range Method( Average of Moving Ranges ),
//Within Sigma Summary Report( 0),
Overall Sigma Summary Report(1),
Select Out of Spec Values( 1 ),
Goal Plot( 0 ),
Capability Index Plot( 0 ),
Capability Box Plots( 0 ),
Process Performance Plot( 0 ),
Order By( "Overall Sigma Ppk Ascending" ),
By( :Wafer ID in lot ID )
);
dt << Clear Select;
我想比较完整数据集的每个参数的 Ppk 与批次 ID 中晶圆 ID上相同参数的能力。为此,我编写了下面的脚本,努力从第二个能力分析中制作一个组合数据表(可以交互进行)。
Report( platform2)[Outline Box( "Process Capability" )][Outline Box( "Overall Sigma Capability Summary Report" )][Table Box( 1 )] <<
Make Combined Data Table;
platform2 << close window;
最后,我想要的是从页面(在 Graph Builder 上)中带有参数名称的组合数据表生成的容量(y 轴)与批次 ID 中的晶圆 ID(x 轴)的图。此外,我需要将第一次能力分析计算出的 Ppk 显示为每个参数的水平线。我可以在这里获得一些帮助吗?
回复:如何在异常值过滤后获取每个参数的 Ppk 和每个晶圆每个参数的 Cpk?当您尝试创建组合数据表时,出现了什么问题?您检查过 platform2 包含哪些内容吗?
Names Default To Here(1);
dt_full = Open("$SAMPLE_DATA/Semiconductor Capability.jmp");
dt = Data Table("Semiconductor Capability") << Subset(All rows, Columns(:lot_id, :wafer, :Wafer ID in lot ID, :SITE, :NPN1, :PNP2, :PNP3, :FNM1, :RES3, RSP2));
Close(dt_full, no save);
col_names = dt << Get Column Group("Processes");
obj = dt << Explore Outliers(Y(Eval(col_names)));
obj << Quantile Range Outliers(Tail Quantile(0.25), Q(1.5));
obj << Change to Missing(ALL);
obj << Close Window;
// Run capability analysis
pc = dt << Process Capability(
Process Variables(Eval(col_names)),
Spec Limits Dialog("No (skip columns with no spec limits)"),
Moving Range Method(Average of Moving Ranges),
Overall Sigma Summary Report(1),
Select Out of Spec Values(1),
Goal Plot(0),
Capability Index Plot(0),
Capability Box Plots(0),
Process Performance Plot(0),
Order By("Overall Sigma Ppk Ascending"),
Invisible
);
dt_nogroup = Report(pc)[Outline Box("Process Capability")][Outline Box("Overall Sigma Capability Summary Report")][Table Box(1)] << Make Into Data Table;
dt_nogroup << Set Name("Capability Report");
pc << close window;
// Run capability analysis by wafer in a lot
pc = dt << Process Capability(
Process Variables(Eval(col_names)),
Spec Limits Dialog("No (skip columns with no spec limits)"),
Moving Range Method(Average of Moving Ranges),
Overall Sigma Summary Report(1),
Goal Plot(0),
Capability Index Plot(0),
Capability Box Plots(0),
Process Performance Plot(0),
Order By("Overall Sigma Ppk Ascending"),
By(:Wafer ID in lot ID),
Invisible
);
dt << Clear Select;
dt_wafer = (Report(pc[1]) << top parent)[Outline Box("Process Capability")][Outline Box("Overall Sigma Capability Summary Report")][Table Box(1)] << Make Combined Data Table;
pc << close window;
Write();
您必须首先尝试自己创建图表,我建议您将“参考”Ppk 值加入到您的“数据”中,并将它们用作任何其他图之上的额外线图。
回复:如何在异常值过滤后获取每个参数的 Ppk 和每个晶圆每个参数的 Cpk?@jthi谢谢。我使用的是 JMP 16.2。当我尝试使用您的脚本获取组合数据表时,我得到了以下结果(我得到的也是同样的结果)

回复:如何在异常值过滤后获取每个参数的 Ppk 和每个晶圆每个参数的 Cpk?我不再有权使用 JMP16,所以你必须自己弄清楚,否则其他人必须加入进来。如果我没记错的话, JMP16 在使用 By 时不会创建对象列表,而是创建一个对象。从那里你必须找到正确的表格框(首先选择正确的信息),你应该能够将 << Make Combined Data Table 发送到那里。
回复:如何在异常值过滤后获取每个参数的 Ppk 和每个晶圆每个参数的 Cpk?这种方法可行吗?
(pc << XPath( "//OutlineBox[text()='Process Capability']//TableBox" ))[1]
<< Make Combined Data Table;
回复:如何在异常值过滤后获取每个参数的 Ppk 和每个晶圆每个参数的 Cpk?@jthi谢谢。
@Mark_Bailey这有效
dt_wafer = Report( pc[1] )[Outline Box( "Overall Sigma Capability Summary Report" )][Table Box( 1 )] <<MAKE combined="" data="https://community.jmp.com/" table=""></MAKE>
Next I would like to produce a chart similar to the one below (or even better with Parameters in the Page option of Graph Builder) with the overall Ppk calculated (in table Capability Report) from the first part of the script as horizontal dashed line on y-axis for each parameter. I do not know how to get y-axis values from one table and use it on a chart produced from a different table so need some help on the JSL here.
<SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Neo_0-1722527733886.png" style="width: 721px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Neo_0-1722527733886.png" style="width: 721px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Neo_0-1722527733886.png" style="width: 721px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Neo_0-1722527733886.png" style="width: 721px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Neo_0-1722527733886.png" style="width: 721px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Neo_0-1722527733886.png" style="width: 721px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Neo_0-1722527733886.png" style="width: 721px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="Neo_0-1722527733886.png" style="width: 721px;"><span class="lia-inline-image-display-wrapper" image-alt="Neo_0-1722527733886.png" style="width: 721px;"><img src="https://us.v-cdn.net/6038925/uploads/images/66723i4C71FBE8A07B4359/Neo_0-1722527733886.png" width="721" height="351" role="button" title="Neo_0-1722527733886.png" alt="Neo_0-1722527733886.png" /></span></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN></SPAN>
回复:如何在异常值过滤后获取每个参数的 Ppk 和每个晶圆每个参数的 Cpk?连接参考数据中的值。首先将“Ppk”列重命名为“Ppk Ref”,然后使用更新并与流程匹配

然后创建图表并在 Y 轴上添加两列:Ppk 和 Ppk ref。禁用点的 Ppk ref 和线的 Ppk

回复:如何在异常值过滤后获取每个参数的 Ppk 和每个晶圆每个参数的 Cpk?@jthi谢谢。这有效。最后,如何在水平线旁边的 y 轴上显示每个过程的 Ppk Ref 值?
另外,如何通过 JSL 将所有图表的 y 轴标题更改为常见的内容(例如“功能”)?
回复:如何在异常值过滤后获取每个参数的 Ppk 和每个晶圆每个参数的 Cpk?使用较新的 JMP 版本非常容易,您只需为该行启用标签即可(不确定这是否已经在 JMP16 中):


如果 JMP16 中不存在该值,那么我将使用参考线并跳过来自另一个表的参考 Ppk 的更新(将它们存储到关联数组并在设置参考值时使用它)。
回复:如何在异常值过滤后获取每个参数的 Ppk 和每个晶圆每个参数的 Cpk?@jthi是的,谢谢。在我的 JMP 16 中找到了启用标签设置。
我的第二个问题是如何通过 JSL 将所有图表的 y 轴标题(通过“页面”)更改为通用标题(例如“功能”)?
回复:如何在异常值过滤后获取每个参数的 Ppk 和每个晶圆每个参数的 Cpk?我会使用 XPath 并尝试找到正确的引用。这可能不适用于所有情况,并且可能需要进行一些调整
Names Default To Here(1);
dt = open("$SAMPLE_DATA/Big Class.jmp");
gb = dt << Graph Builder(
Size(528, 2954),
Show Control Panel(0),
Variables(X(:height), Y(:weight), Page(:age)),
Elements(Points(X, Y, Legend(15)), Smoother(X, Y, Legend(16)))
);
tebs = Report(gb) << XPath("//TextEditBox");
tebs[4::N Items(tebs)::2] << Set Text("Capability");回复:如何在异常值过滤后获取每个参数的 Ppk 和每个晶圆每个参数的 Cpk?@jthi 。谢谢。我选择了 Wrap,它符合我的图表需求。在这种情况下,只需要担心一个 y 轴,我可以在 JSL 上处理。