你好,
我有一个非常大的数据表(大约 600 万行)。 它特别具有作为列的日期列、产品参考列和结果列(具有两个可能的值:OK 或 NOK)。 每行对应一个组件测试。
我希望能够让用户选择一个时期或日期。 从这个时期开始,我希望能够找到并提取与所选时期内进行的测试数量相比具有最多结果 == NOK 的 5 个产品参考。
我不知道如何以最佳方式编写脚本。
如果您对我有任何想法,请提前致谢
你好,有很多方法可以做到这一点。 一种特别好的方法是使用带有查询后脚本的 JMP Query Builder,它会在继续分析之前提示用户输入开始和结束日期。 我强烈建议您了解 JMP 查询生成器以进行此类工作。 不幸的是,在这里打字有点太多了。
我将给出一个仍然有效的简单替代方案。
首先,我总是建议以数字方式存储 1/0 数据,如 1 和 0,使用值标签来显示诸如“OK”和“NOK”之类的内容。 在您的情况下,我们可以使用 1 => "OK" 和 0 -> "NOK"。 (见附件数据表。)
我建议这样做,因为按组汇总平均值可以立即提供每个组中“OK”的比例。 如果 1 和 0 已颠倒,则平均值给出“NOK”的比例。
因此,在做出这一更改后,我们又做了一件事:我们添加了表变量。 右键单击表名称附近的红色三角形,然后选择新建表变量。 这将显示一个对话框,您可以在其中命名新表变量并为其指定初始值。

为“开始”和“结束”执行此操作允许我们定义两个值(在这种情况下是字符串,但数字也可以),它们可以像公式和脚本中的列一样使用。 要稍后更改值,只需双击它即可进行编辑。
使用相同的红色小三角菜单,我们可以向数据表添加一个新脚本。 我添加了一个名为“Worst 5”的脚本并粘贴了下面的脚本文本。
Names Default To Here(1);
dt = Current Data Table();
//change table variable strings to times. the format used for the string must be one that JMP recognizes.
beg = informat(dt:Begin);
end = informat(dt:End);
//subset the table to get only those rows in the time interval of interest
dtSub = dt << subset(selected Columns (0), rows(dt << get rows where (beg < :date < end)));
//summarize this new table to find averages of the OK column, grouping by product. This will be the proportion of "good"
dtSubSum = dtSub << summary(group(:product), mean(:OK));
//sort this new table, ascending
dtSubSum << sort(replace table, by(:"Mean(OK)"n), order(ascending));
//the first 5 rows now have the lowest proportion of "good", hence highest proportion of "bad"
dtSubSum << subset(selected Columns(0), rows(1::5));
//close the first subset table, and the summary table linked to it.
close(dtSub, nosave);

现在很容易得到你想要的报告:
1) 根据需要更改开始和结束值。
2) 按“最差 5”脚本上的绿色按钮以获取结果。
同样,有更灵活的方法可以做到这一点,但它们需要了解 JMP 查询生成器或交互式窗口(显示树)脚本。 我强烈建议学习这两个,但与此同时,表变量和基本表操作可以做很多事情。
另一种选择,不涉及脚本:
1) 使用制表平台计算均值,同时使用本地数据过滤器来限制考虑的日期范围。
2) 右键单击完成的 Tabulate 报告表,选择 Make into Data Table,然后对结果数据表进行排序,使 5 个“最差”行(即 5 个最低的 OK 平均值)位于表的顶部。
3) 如果需要,选择这 5 行和子集。
希望这些想法之一可以帮助您入门。
干杯,
布雷迪