根据新的规格限制重新分类我有一个表,其中包含许多带有规格限制的参数和一个通过失败列。
我使用管理规格限制来更改一些限制并将它们重新加载到表的列中。
到目前为止还好。
但现在我想根据新的规格限制重新分类所有设备(即重新确定通过和失败)。
由于有很多很多参数,编写公式来执行此操作会很麻烦并且需要相当多的时间。
我可以编写一个脚本来执行此操作(确定具有规格限制的列并基于此创建公式列)。
但是 JMP 中有内置的东西可以做到这一点吗?
消费者和市场研究回复:根据新的规格限制重新分类你的观察是正确的。我提供的代码假设所有列都有规格限制。您创建仅包含完全限定列的子集的建议是处理它的一种方法。这将是一个好方法。
另一种选择是在提供的代码中添加识别没有规格限制的列的能力,并绕过它们。
无论哪种方式都会起作用。
回复:根据新的规格限制重新分类谢谢,吉姆! 它肯定要快得多。
这种矩阵方法是否能够处理“不考虑 USL=LSL 的列”或“无规格限制的列”等异常情况?
我是否需要首先创建一个包含有效列(自定义列子集并通过“无效”条件自动排除列)的子表,然后应用建议的脚本并使用结果列更新源? --> 这是一种有效的编码方式吗?
回复:根据新的规格限制重新分类我认为以下脚本是您查找首次失败测试的更好方法。此脚本创建一个新列,并使用第一个失败列的名称填充该列

Names Default To Here( 1 );
dt=open("$SAMPLE_DATA/semiconductor capability.jmp");
USLVals = LSLVals = [];
For( i = 5, i <= N Cols( dt ), i++,
USLVals = USLVals || Matrix( (Column( dt, i ) << get property( spec limits ))["USL"] );
LSLVals = LSLVals || Matrix( (Column( dt, i ) << get property( spec limits ))["LSL"] );
);
dt << New Column( "First Fail", character );
For( i = 1, i <= N Rows( dt ), i++,
theMin = Min(
Min( Loc( (USLVals < dt[i, Index( 5, N Cols( dt ) - 1 )]) ) ),
Min( Loc( (dt[i, Index( 5, N Cols( dt ) - 1 )]) < LSLVals ) )
);
:First Fail[i] = Column( dt, theMin + 4 ) << get name;
);
回复:根据新的规格限制重新分类 theRows = dt << get rows where( Eval( specs["LSL"] ) >= As Column( dt, colNames[i] ) | As Column( dt, colNames[i] ) >= Eval( specs["USL"] ) );
我得到了它!
回复:根据新的规格限制重新分类@tx尼尔森
嘿吉姆,
我正在尝试修改您在此处提供的脚本。
我失败了...
我想要一个额外的列来收集失败类别。 失败类别应显示第一个失败列。 因此,我反向循环,目的是覆盖所有后续的失败类别。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/semiconductor capability.jmp" );
dt << New Column( "First_Failed_Test", character, set each value( "Pass" ) );
colNames = dt << get column names( continuous, string );
For( i = N Items( colNames ), i >= 1, i--,
Clear Symbols( specs );
specs = Column( dt, colNames[i] ) << get property( "Spec Limits" );
If( Is Empty( specs ) == 0 | Eval( specs["LSL"] ) != Eval( specs["USL"]) ,
theRows = dt << get rows where( Eval( specs["LSL"] ) >= As Column( dt, colNames[i] ) >= Eval( specs["USL"] ) );
If( N Rows( theRows ),
Column( dt, "First_Failed_Test" )[theRows] = colNames[i]
);
);
);
你看出脚本有什么问题了吗?
回复:根据新的规格限制重新分类谢谢。 这很有效。
我还在脚本循环中构建了一个表达式,用作计算总体通过/失败结果的公式。回复:根据新的规格限制重新分类我不知道基于规格限制的 JMP 分箱工具,但这里有一段非常有效的分箱代码。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/semiconductor capability.jmp" );
colNames = dt << get column names( continuous, string );
For( i = 1, i <= N Items( colNames ), i++,
Clear Symbols( specs );
specs = Column( dt, colNames[i] ) << get property( "Spec Limits" );
If( Is Empty( specs ) == 0,
dt << New Column( colNames[i] || " Pass_Fail", character, set each value( "Fail" ) );
theRows = dt << get rows where( Eval( specs["LSL"] ) <= As Column( dt, colNames[i] ) <= Eval( specs["USL"] ) );
If( N Rows( theRows ),
Column( dt, colNames[i] || " Pass_Fail" )[theRows] = "Pass"
);
);
);