如何获取行中缺少数据的多列的最大值!你好,
假设我们有一个数据集,我们希望获得所选列的最大值
dt = New Table( "Untitled",
New Column( "a@b;2", Numeric, Set Values( [12, 33, 1] ) ),
New Column( "b", Numeric, Set Values( [2, 11, 2] ) ),
New Column( "c@d;3", Numeric, Set Values( [333, 1, 0] ) )
);
colnames = dt << getcolumnnames;
use_cols = {};
include = {"@"};
For( j = 1, j <= N Items( include ), j++,
For( i = 1, i <= Nitems( colnames ), i++,
If(Contains(colnames[i], include[j]),
insert into (use_cols , colnames[i]))
));
dt << new column("max_col",numeric,formula(Maximum(use_cols)))
我不明白为什么它返回 max_col 中的缺失值? 我们应该循环使用 use_cols 吗?
谢谢!
数据混合和清理回复:如何获取行中缺少数据的多列的最大值!对不起!这没有成功!回复:如何获取行中缺少数据的多列的最大值!感谢 txnelson 提供的出色解决方案! 你总是乐于提供细节并把事情解释得非常清楚!回复:如何获取行中缺少数据的多列的最大值!在运行 Windows 10 的 Windows PC 上运行,我返回了几个版本的 JMP 并运行了您的脚本,它在所有版本上都正确运行。

您的第二个条件是,有时数据中缺少值不应成为问题。Maximum() 函数处理缺失值。
由于不了解您的脚本的更多信息,我会指出一个可能的问题。如果您查看为 max_col 列创建的公式,您将看到:

该公式依赖于列表“use_cols”,因此每次运行或重新运行该公式时,它都会转到列表并使用“use_cols”“在该时间点”的值并将其放入公式中。如果“use_cols”的值为“ {名称(“a@b;2”), 名称(“c@d;3”)} ”,一切都会顺利进行。如果由于某种原因,列表“use_cols”更改了其值,则公式可能不起作用,并且您将得到缺失的值。你真正想要的是公式是
Maximum( {:Name( "a@b;2" ), :Name( "c@d;3" )} )
根据我的经验,最简单的方法是将新列和公式指定为:
Eval(Parse("dt << new column(\!"max_col\!",numeric,formula( Maximum(" || char(use_cols) || ")));"));
其结果是公式被指定为:

回复:如何获取行中缺少数据的多列的最大值!你好,
您只需要通过在最后一个语句中添加“as columns”来帮助 JMP 确定变量“use_cols”指的是列:
dt << New Column( "max_col", numeric, formula( Maximum( as columns( use_cols ) ) ) );
回复:如何获取行中缺少数据的多列的最大值!有时忘记添加列也可能包含缺失值。 当我建立数据表时我不知道如何添加它们。