你好,
我尝试选择“违规”列中值为 1 的所有行,提取“设备”列值,然后排除与这些设备关联的所有行。任何人都可以帮我想出一个脚本吗?谢谢!
下面是一个将执行此操作的脚本
Names Default To Here(1);
dt = Current Data Table();
dt << Clear Row States;
violation_rows = dt << Get Rows Where(:Violation == 1);
violation_devices = Associative Array(dt[violation_rows, "Device"]) << get keys;
dt << Select Where(Contains(violation_devices, :Device)) << Exclude(1) << Clear Select;
- 获取行号,其中:Violation == 1
- 使用数据表下标和关联数组来获取设备
- 选择包含这些设备的行并将其排除
您也可以轻松地以交互方式执行此操作(这将由增强日志记录):
- 创建一个汇总表,其中“设备”为组,“违规”为子组。 还要确保表已链接
- 从 N(1) 中选择 0 个值(表示验证 == 1),然后右键单击行以反转选择
- 现在您已在主表中选择了设备
- 您现在可以排除这些行
JMP 将为您创建一个像这样的脚本
// Open Data Table: Sample(1).jmp
// → Data Table("Sample(1)")
Open("$DOWNLOADS/Sample(1).jmp");
// Data table summary
// → Data Table("Sample(1) By (Device)")
Data Table("Sample(1)") << Summary(Group(:Device), N, Subgroup(:Violation), Freq("None"), Weight("None"));
// Select matching cells
Data Table("Sample(1) By (Device)") << Select Where(:"N(1)"n == 0);
// Invert current selection
Data Table("Sample(1) By (Device)") << Invert Row Selection;
// Toggle selected rows' exclude state
Data Table("Sample(1) By (Device)") << Select Where(:"N(1)"n == 0) << Invert Row Selection << Exclude;
// Close Data Table: Sample(1) By (Device)
Close(Data Table("Sample(1) By (Device)"), NoSave);
经过一些小的修改,它将成为将来使用的相当强大的脚本(使用变量而不是表名,以“Names Default To Here(1)...”开始,以提及一些更改)。