| 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." )
);
它看起来很多工作,但我发现大多数脚本编写者在完成这一次之后,并且意识到这种方法提供的选项数量,他们经常使用它。
祝好运!