| M1 | M2 | M3 | M4 | M5 | M6 | M7 | M8 | 設備 | 家庭 |
| 1 | 2 | -2 | -1 | -3 | 2 | -1.5 | 0.5 | D1 | F1 |
| 2 | -2 | 2 | 3 | 2 | -1 | 1 | 2 | D2 | F1 |
| 1.5 | 2 | 2.5 | 2 | 0.5 | 1 | -1 | -1.5 | D3 | F1 |
| -1 | 1 | -1 | -1 | -0.5 | 1 | 0.5 | -1 | D4 | F1 |
| 2 | -3 | 1 | -2 | 1 | -2.5 | 0.5 | -1 | D5 | F1 |
| -3 | -0.5 | -1 | 1.5 | 。 | 。 | -1 | 1 | D6 | F2 |
| 2.5 | 1 | 0.5 | 1.5 | 。 | 。 | -0.5 | 2 | D7 | F2 |
我將以此表為例。假設m1-m8是某些設備的一些測試參數。在實際表中,查詢的測試參數的數量可能不同。我想使用JSL為不同系列的Device之間的那些參數繪製可變性圖表。
在JSL中,我做到了
myVC = Variability Chart(
invisible,
Y(Eval(parameterlist)),
X(:Device),
By(:Family)
);
我將參數m1-m8分組為參數列表。但是由於缺少數據,代碼在嘗試繪製F2的圖表時會導致錯誤。
有沒有辦法處理丟失的數據?我希望JMP仍然為具有數據的參數繪製F2的可變性圖表。(在這種情況下為m1,m2,m3,m4,m7,m8)。之後,我希望JMP按家庭顯示可變性圖表並將其另存為html報告。
F1 - m1
。
。
F1 - m8(報告中顯示可變性圖表的順序)
F2 - m1
。
。
F2 - m8
請注意,測試參數的數量,設備的數量和不同系列的數量可能因查詢而異。
XiangLoh,
您可能想查看之前的帖子
https://community.jmp.com/t5/Discussions/JSL-Generate-xy-Plot-that-loops-through-columns-with-different/mp/56020#M31438
我在那裡提出的建議,我將適用於您的數據。以下是步驟/偽代碼:
- 創建參數列表(已完成)
- 運行,總結(fgrp = By(:Family)); fgrp是家庭值列表
- nw =新窗口(“測試”,vl = VListBox());
for( i=1, i<=nitems(fgrp), i++,
fam = fgrp[i];
for(j=1, j<=nitems(parameterlist), j++,
param = parameterlist[j];
idx = dt << get rows where(:Family == fam);
// compute the number of non-missing values for column(param)[idx]
// if that number is greater than 0 or some minimum you set then
myVC = dt << Variability Chart( invisible, Y ( AsColumn(param) ) , X(:Device), By(:Family), where(:Family==fam) );
get rid of the where where textbox and append to VL
); //end j
); //end i
這種方法為您提供了很大的靈活性。 您可以為每個系列保存不同的HTML,或者按變量和族更改順序和繪圖。 您可以使用a代替2個註釋步驟的代碼嘗試()
Try( myVC = dt << Variability Chart( invisible, Y ( AsColumn(param) ) , X(:Device), By(:Family), where(:Family==fam) );
// get rid of the where where textbox and append to VL
, //else do nothing
Show( "variable " || param || " for Family == " || fam || "has no valid data." )
);
它看起來很多工作,但我發現大多數腳本編寫者在完成這一次之後,並且意識到這種方法提供的選項數量,他們經常使用它。
祝好運!