
我遇到了一个问题,我想看看我的旧控制限相对于一组控制图的当前或新固定控制限是什么样子。 通常,我会向每个图表添加参考线,但我认为可能有更好的方法,使用长期被遗忘的(至少对我来说)平台消息。
今年早些时候,我正在考虑添加新列属性的想法,在本例中行动和警报限制对于环境监测图,然后使用该列属性作为控制图中的参考线。
当我在脚本索引中寻找完全不同的东西时,我遇到了一个名为“添加限制”的函数。 据我所知,这个函数已经存在很长时间了,至少在 JMP 14 之前,它可以用来将控制上限和下限发送到控制图。 这些限制显示为虚线,并列在图表旁边的表格中。 我需要大量的 JSL 才能实现这一点,所以很高兴发现这样一个非常有用的实用程序。
“添加限制”的基本用法如下所示,其中 JSL 的最后一行向图表发送一条消息,其中包含用作虚线限制的值:
//Example of adding limits to a control chart
ccb = dt << Control Chart Builder( Variables( Y( :Column 1 ) ), Show Control Panel( 0 ) );
ccb << chart( position( 1 ), Add Limits( {LCL( 20 ), UCL( 30 )} ) );
当然,我想对任何列动态使用“添加限制”,因此这需要一些额外的花哨的工作。
首先,让我们设置一个表作为示例。请注意,在设置表时,我删除了生成一些随机数据以在表构建后立即使用的公式。 这将修复表中的值。
dt=New Table( "old and new control limits",Add Rows( 50 ),
New Column( "Column 1",Numeric,"Continuous",Format( "Best", 12 ),
Formula( Round( Random Normal( 25, 3 ), 0 ) )));
column(dt, 1)<< Delete Formula;
下一步是添加一种新类型的列属性,这是 JMP 中本身不存在的自定义属性。运行此行后,数据表中的列现在有一个名为旧的控制限制。
Column( dt, 1 ) << set property( "Old Control Limits", {LCL( 20 ), UCL( 30 )} );
然后,只需检查脚本是否有效,您可以查看列属性中的值。新变量,光学显微镜,有两个值,拼箱(20) , 和伦敦大学学院(30) 。 我可以在新的控制图中使用这些值:
OCL = Column( dt, 1 ) << Get Property( "Old Control Limits" );Show( OCL[1], OCL[2] );
接下来的几行可能看起来很奇怪,但它们非常健壮,并且利用了基于 JSL 函数的结构。
首先,我将定义几个空或几乎空的参数,然后将它们嵌套在一起。通过设置这些表达式,我可以处理每个部分而无需评估它们。CCBE ,控制图生成器表达式是一个函数,控制图生成器有两个参数,变量和显示控制面板。
接下来,我想添加一个名为 c 的新参数哈特()到控制图生成器功能。
- 新变量, CE是一个带有参数 c 的表达式哈特图表包含一个参数,职位 (1) 。
- 我想添加,添加限制图表参数所以我有变量AE ,引用一个空的添加限制表达。
- 最后我创建了一个名为的空列表乐,其中将包含我从中得到的限制获取财产在里面光学显微镜上一步中的变量。
ccbe = Expr(Control Chart Builder( Variables( Y( :Column 1 ) ), Show Control Panel( 0 ) ));
ce = Expr( chart( position( 1 ) ) );
ae = Expr( add limits() );
le = {};
然后,我将这些部分分层在一起以执行以下操作:
- 首先,我列出了其中的物品清单光学显微镜并将其插入乐。
- 其次,我采取乐并将其插入AE ,然后插入AE进入CE 。 在第二种情况下,我包裹了AE里面一个名称表达式() 。 这给了我评估的表达式AE而不对其进行评估。 这名称表达式()方法超级方便。
- 第三,我插入CE进入CCBE ,这是整个控制图表达式。
- 我还包括了一个展示在每个步骤之后,您可以在日志中看到该函数是如何构建的。
- 最后一步是获取图表。 只要跑步CCBE单独地,保存完整表达式的变量被评估,并且我得到一个控制图,其中的虚线代表旧的控制限制,它来自列属性
Insert Into( le, OCL );show( le );
Insert Into( ae, le );Show( ae );
Insert Into( ce, Name Expr( ae ) );Show( ce );
Insert Into( ccbe, Name Expr( ce ), 2 );
ccbe;
只要多一点努力,我很确定可以从一个包含当前和旧控制限制的表开始,该表可用于填充整个过程变量表的所有列属性。
附上完整脚本。
好的@Byron_JMP
旁注 - 我也不知道 Set Property() 允许人们创建自己的属性。 事后有意义:列只是另一个对象,因此与用于设置对象(列、表)变量/值的新表变量类似。 谢谢你的金块!