
我遇到了一个问题,我想看看我的旧控制限相对于一组控制图的当前或新的固定控制限会是什么样子。 通常我会为每个图表添加参考线,但我认为可能有更好的方法,使用一个被遗忘已久(至少对我而言)的平台消息。
今年早些时候,我在考虑添加新列属性的想法,在本例中为环境监测图表的 Action 和 Alert Limts,然后将该列属性用作控制图表中的参考线。 链接到 EM 博客
当我在脚本索引中寻找完全不同的东西时,我遇到了一个名为“添加限制”的函数。 据我所知,这个功能已经存在很长时间了,至少在 v14 之前,它可以用来将控制上限和下限发送到控制图。 这些限制显示为虚线,并列在图表旁边的表格中。 我需要大量的 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 )} ) );
JSL 的最后一行向图表发送一条消息,其中包含用作虚线限制的值。
当然,我想在任何列中动态地使用它,所以这需要一些额外的花哨的脚部工作。
首先让我们建立一个表格作为例子。
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 )} );
运行此行后,数据表中的列现在有一个名为旧控制限的属性。
只是为了检查脚本是否有效,您可以通过执行此操作查看列属性的值。
OCL = Column( dt, 1 ) << Get Property( "Old Control Limits" );Show( OCL[1], OCL[2] );
新变量 OCL 有两个值,LCL(20) 和 UCL(30)
我可以在新的控制图中使用这些值。
接下来的几行可能看起来很奇怪,但它们非常健壮并且利用了 JSL 的基于函数的结构。
首先,我将定义几个空的或几乎空的参数,然后将它们嵌套在一起。
ccbe = Expr(Control Chart Builder( Variables( Y( :Column 1 ) ), Show Control Panel( 0 ) ));
ce = Expr( chart( position( 1 ) ) );
ae = Expr( add limits() );
le = {};
通过设置这些表达式,我可以在不评估它们的情况下处理每个部分。
ccbe,控制图生成器表达式是一个函数,“控制图生成器”有两个参数,“变量”和“显示控制面板”
我想向 Control Chart Builder 函数添加一个名为 Chart() 的新参数。 新变量 ce 是一个带有参数“Chart”的表达式,而 Chart 包含一个参数“Position (1)”。
我想添加 Add Limits 到 Chart 参数,所以我有变量 ae,以引用一个空的 Add Limits 表达式。
最后我制作了一个名为“le”的空列表,它将包含我从上一步的 OCL 变量中的“Get Properties”获得的限制。
接下来,我将把各个部分叠加在一起:
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;
首先,我将 OCL 中的事物列表插入到文件中。
其次,我将“le”插入“ae”,然后将“ae”插入“ce”。 在第二种情况下,我将“ae”包装在 Name Expr() 中。 这给了我 ae 的评估表达式而不评估它。 这个 NameExpr() 方法非常方便。
最后我在ccbe中插入ce,就是整个控制图表达式。
在上面的 JSL 中,我在每个步骤后都包含了一个“显示”,这样您就可以在日志中看到函数是如何构建的。
最后一步是获取图形。 通过单独运行 ccbe,保存完整表达式的变量得到评估,我得到一个控制图,其中虚线表示旧的控制限制,它来自列属性。
稍加努力,我很确定可以从一个包含当前和旧控制限制的表开始,该表可用于填充整个过程变量表的所有列属性。
整个脚本包含在下面。