
我遇到了一個問題,我想看看我的舊控制限相對於一組控製圖的當前或新固定控制限是什麼樣子。 通常,我會向每個圖表添加參考線,但我認為可能有更好的方法,使用長期被遺忘的(至少對我來說)平台消息。
今年早些時候,我正在考慮添加新列屬性的想法,在本例中行動和警報限制對於環境監測圖,然後使用該列屬性作為控製圖中的參考線。
當我在腳本索引中尋找完全不同的東西時,我遇到了一個名為“添加限制”的函數。 據我所知,這個函數已經存在很長時間了,至少在 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() 允許人們創建自己的屬性。 事後有意義:列只是另一個對象,因此與用於設置對象(列、表)變量/值的新表變量類似。 謝謝你的金塊!