使用配置列選擇性地將規則套用到控製圖你好,
我在應用適當的趨勢規則或「測試」來使用 JSL 控制圖表時遇到問題。我的數據包括去年對某種產品的所有測量批次的多重分析結果。我正在使用的資料採用堆疊格式,表中包含包含控制和規格限的列,以及所有 8 個測試的 8 列。在測試列中,每行將有 1 或 0 來指示規則是否適用。我在下面以類似的格式設定了一個範例表以供參考。
| 批次編號 | 分析 | 結果 | 拼箱 | 倫敦大學學院 | 規則1 | 規則3 | 規則5 |
| A | X | 12 | 10 | 18 | 1 | 0 | 0 |
| A | Y | 204 | 200 | 215 | 1 | 0 | 1 |
| A | Z | 0.8 | 0.5 | 1 | 1 | 1 | 1 |
| B | X | 13 | 10 | 18 | 1 | 0 | 0 |
| B | Y | 209 | 200 | 215 | 1 | 0 | 1 |
| B | Z | 0.7 | 0.5 | 1 | 1 | 1 | 1 |
| C | X | 15 | 10 | 18 | 1 | 0 | 0 |
| C | Y | 205 | 200 | 215 | 1 | 0 | 1 |
| C | Z | 0.8 | 0.5 | 1 | 1 | 1 | 1 |
在此範例中,針對 3 個獨特批次進行了 3 個獨特分析。 「結果」列對於每個批次的每次分析都是唯一的,但控制限和趨勢規則是匹配的以進行匹配分析,因此對於分析X,僅應應用規則1,但對於分析Z,應應用所有3 條規則。我使用下面的程式碼繪製了控製圖,為了範例,對列名稱進行了少量修改:
dt << Control Chart(
Sample Label( :Lot ),
Group Size( 1 ),
KSigma( 3 ),
By( :Analysis ),
Chart Col( :Result, Levey Jennings( Show Zones( 1 ), Shade Zones( 1 ), Test 1( :Rule1[1] ), Test 3( :Rule3[1] ), Test 5( :Rule5[1] ) ) ),
SendToReport(
Dispatch(
{},
"Levey Jennings of Result",
OutlineBox,
{Set Title("Parameter: "||char(:Analysis))}
),程式碼的其餘部分是 Dispatch 命令,用於添加參考線、調整幀大小等。如上所示,當將「測試 1」、「測試 3」和「測試 5」行新增至 Levey Jennings 命令時,我嘗試引用對應設定列中第一行的值。這樣,當腳本按分析繪製圖表時,第一行將包含目前繪製的分析的趨勢規則配置。但是,當我運行腳本時,它僅應用所有 3 個規則,無論它們是否應應用於該特定參數。有人可以幫助解釋如何讓 JMP 解析各個配置列中的值並確定 Analysis 是否應將特定規則應用於每個圖表?
我之前已經在拆分錶中完成了這項工作,但我是透過使用 for 循環創建一個字串並將值連接到該字串中,然後使用 Parse 和 Eval 命令來執行的。如果可以避免的話,我真的不想在這裡使用 for 循環,因為這就是我首先以堆疊格式提取資料的原因。
自動化和腳本編寫數據探索和視覺化回覆:使用設定列選擇性地將規則套用至控製圖我運行了你的 JSL,做了 2 個修改
- 您指定了名為 Lot 的列,實際名稱為 Lot ID
- 我刪除了“發送至報告”部分
Names Default To Here( 1 );
dt = Current Data Table();
dt << Control Chart(
Sample Label( :Lot ID ),
Group Size( 1 ),
KSigma( 3 ),
By( :Analysis ),
Chart Col(
:Result,
Levey Jennings(
Show Zones( 1 ),
Shade Zones( 1 ),
Test 1( :Rule1[1] ),
Test 3( :Rule3[1] ),
Test 5( :Rule5[1] )
)
);
程式碼運行並產生以下輸出

為了驗證指定的測試是否正確處理,我保存了控製圖輸出中的腳本
Control Chart(
SendToByGroup( {:Analysis == "X"} ),
Sample Label( :Lot ID ),
KSigma( 3 ),
SendToByGroup(
{:Analysis == "X"},
Chart Col(
:Result,
Levey Jennings( Show Zones( 1 ), Shade Zones( 1 ), Test 1( 1 ) )
)
),
SendToByGroup(
{:Analysis == "Y"},
Chart Col(
:Result,
Levey Jennings(
Show Zones( 1 ),
Shade Zones( 1 ),
Test 1( 1 ),
Test 5( 1 )
)
)
),
SendToByGroup(
{:Analysis == "Z"},
Chart Col(
:Result,
Levey Jennings(
Show Zones( 1 ),
Shade Zones( 1 ),
Test 1( 1 ),
Test 3( 1 ),
Test 5( 1 )
)
)
),
By( :Analysis )
);
從生成的腳本中可以看出,控製圖收到了有關每個分析要運行哪些測試的信息
我使用 JMP 18.1.0 在 Windows 11 上執行程式碼
我沒有看到問題
回覆:使用設定列選擇性地將規則套用至控製圖好的,所以我嘗試完全按照您的描述進行複製。這是我運行的腳本。
Names Default to Here( 1 );
dt = Current Data Table();
dt << Control Chart(
Sample Label( :Lot ID ),
Group Size( 1 ),
KSigma( 3 ),
By( :Analysis ),
Chart Col(
:Result,
Levey Jennings(
Show Zones( 1 ),
Shade Zones( 1 ),
Test 1( :Rule1[1] ),
Test 3( :Rule3[1] ),
Test 5( :Rule5[1] )
)
)
);
但我的輸出預設為每次分析都啟動所有三個規則。以下是 X 分析的腳本,該腳本應該僅根據配置列套用測試 1。
Control Chart(
Sample Label( :Lot ID ),
KSigma( 3 ),
Chart Col(
:Result,
Levey Jennings(
Show Zones( 1 ),
Shade Zones( 1 ),
Test 1( 1 ),
Test 3( 1 ),
Test 5( 1 )
)
),
Where( :Analysis == "X" )
);
我在 Windows 11 上的 JMP 17.0.0 上運行,因此也許這是我們版本之間的更新之一中解決的問題。在進行任何其他故障排除之前,我會透過 IT 部門了解更新。感謝您測試程式碼,我很高興看到程式碼原則上應該可以工作!
回覆:使用設定列選擇性地將規則套用至控製圖我已在 JMP 17 中複製了您的發現。
Names Default To Here( 1 );
dt = Current Data Table();
Summarize( dt, byGroup = By( :Analysis ) );
For Each( {level}, byGroup,
dt << select where( :Analysis == level );
dtTemp = dt << Subset( selected columns( 0 ), selected rows( 1 ) );
Eval(
Eval Expr(
dtTemp << Control Chart(
Sample Label( :Lot ID ),
Group Size( 1 ),
KSigma( 3 ),
//By( :Analysis ),
Chart Col(
:Result,
Levey Jennings(
Show Zones( 1 ),
Shade Zones( 1 ),
Test 1( Expr( dtTemp:Rule1[1] ) ),
Test 3( Expr( dtTemp:Rule3[1] ) ),
Test 5( Expr( dtTemp:Rule5[1] ) )
)
)
)
)
);
);回覆:使用設定列選擇性地將規則套用至控製圖這與我在使用拆分錶時實現這一目標的方式類似,按列號循環並創建一個最終被解析為 JSL 並求值的表達式。我只是希望在處理堆疊表時避免使用 For 語句,並利用 By 和Where 函數透過分析進行分離。最終,這個 JMP17 程式碼仍然比我為拆分錶開發的程式碼簡單得多。再次感謝您的投入!我將嘗試將其合併到我目前的腳本中,直到能夠升級到 JMP18。