你好,
我有一個包含數十萬行的資料表。有一個運行 ID 列、一列設備名稱(目前感興趣的 29 個)和一列關聯值。因此,對於每次運行,都有多個設備記錄數據,我想為每個設備建立運行圖表,並以運行 ID 作為 x 軸。但是,我有兩個問題可以單獨部分解決,但不能一起解決。
首先,我使用 JMP 13。我確實可以訪問 JMP 16,但目前尚未安裝。我有一大堆現有腳本,我不想透過更改為 JMP 的另一個版本來破壞它們,以及我想要做什麼應該很容易做到。
其次,我嘗試採取的一般方法如下:
- 循環遍歷唯一設備名稱清單並產生運行圖;輸入每個單獨的運行圖控制和規格限制,這些控制和規格限制是根據每個設備的數據確定的(我可以輕鬆地將控制和規格限制輸入到控製圖中)
- 將所有圖表聚合到新視窗中
我用於繪圖的腳本如下:
curDev = devices[i]<BR />dt << Control Chart(
Sample Label( :ID ),
KSigma( 3 ),
Where( :DeviceName == curDev ),
Chart Col( Value, Levey Jennings(Avg(lims[4]), LCL(lims[3]), UCL(lims[5]) ) ), // lims list found separately
SendToReport(
Dispatch(
{"Levey Jennings of Value"},
curDev,
TextEditBox,
{Set Text( curDev )} // Ensures y-axis title is device name rather than column name of "Value"
)
)
);這會創建多個圖形窗口,每個窗口頂部都有一個框,上面寫著“Where Device == curDev”。
因此可以繪製圖表,儘管有一個不必要且醜陋的框,但我打開了 29 個圖表視窗。
所以現在我需要將它們全部聚合在一個視窗中並刪除頂部的“Where Device ==”框。
論壇上有這樣的回复,我認為會有幫助:如何從圖形產生器報告視窗中刪除“Where” - JMP 使用者社區。事實上,如果我產生 29 個單獨的圖表,它確實會刪除頂部的框,因此:
Build_Chart = Function({var},
cco = dt << Control Chart(
Sample Label( :ID ),
KSigma( 3 ),
Where( :Value == curDev ),
Chart Col( :Value, Levey Jennings(Avg(lims[4]), LCL(lims[3]), UCL(lims[5]) ) ),
);
tp = Report(cco) << topparent;
tp[Textbox(1)] << delete;
);
for(i=1, i<=NItems(devices), i++,
curDev = devices[i]; //probably unnecessary
Build_Chart(curDev);
)但是,當我嘗試執行連結論壇帖子中所述的相同操作時,我在視窗中得到 1 個圖表,然後腳本錯誤“在存取或評估“發送”時,發送需要可編寫腳本的物件{75240},tp[文字方塊(1)] <<刪除/*###*/”
Build_Chart = Function({var},
// same function as above
)
pb = Panel Box();
for (i = 1, i<= NItems(devices), i++,
curDev = devices[i];
pb <<APPEND></APPEND>為什麼將圖表附加到面板框會與 Build_Chart 函數中的 tp << delete 發生衝突?
我嘗試過的另一種方法如下所示,我得到一個報告對象:
nw = New Window("Charts",
lub = Lineup Box(NCol(2));
);
for (i = 1, i<= NItems(devices), i++,
curDev = devices[i];
cco = dtRecLog << Control Chart(
Sample Label( :ID ),
KSigma( 3 ),
Where( :Device == curDev ),
Chart Col( :Value, Levey Jennings(Avg(lims[4]), LCL(lims[3]), UCL(lims[5]) ) ),
);
rep = cco << Report;
lub << Append(rep);
);這將創建一個包含 29 個圖形的單獨窗口,沒有“Where ==”框,但它也產生 29 個獨立的圖形視窗。cco << 刪除視窗不起作用,因為 cco 不是對視窗的引用。我可以做一個 Window(<窗口名稱>) << 刪除窗口,但我不知道窗口名稱是什麼,而且明顯的猜測不起作用,所以我無法刪除 JSL 中的窗口。
所以,我需要幫助的是以下內容:
- 建立一個包含所有圖表的窗口,圖表視窗上方沒有「Where :Device == curDev」框
- 將所有圖表聚合到一個視窗中
- 不會產生 29 個不同的視窗。
非常感謝您的幫忙。
我相信您可以透過使用控製圖上的“不可見”選項來轉移到您的解決方案,然後將報告附加到獨立的日誌視窗。下面是對程式碼的修改,說明了執行此操作的方法。我無法測試該腳本,沒有示例數據表,但我相信您將能夠看到我的方法,我知道它會起作用。
Build_Chart = Function({var},
cco = dt << Control Chart(invisible,
Sample Label( :ID ),
KSigma( 3 ),
Where( :Value == curDev ),
Chart Col( :Value, Levey Jennings(Avg(lims[4]), LCL(lims[3]), UCL(lims[5]) ) ),
);
tp = Report(cco) << topparent;
tp[Textbox(1)] << delete;
);
NW = New Window("Results",<<JOURNAL></JOURNAL>