如何在行中缺少數據的多列中獲取最大值!你好,
假設我們有數據集,我們希望在選定的列中獲取最大值
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 PC 上運行,運行 Windows 10,我返回了幾個版本的 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 ) ) ) );
回复:如何在行中缺少數據的多列中獲取最大值!忘記添加有時列也可能包含缺失值。 當我構建數據表時,我不知道如何添加它們。