跨多列搜尋每行的最大值和來源列的名稱你好,
我試圖提出一個 jsl 腳本,它可以找到每行的最大值以及與最大值對應的列名。 我能夠找到所有列的最大值,但需要一些建議來尋找與最大值對應的列名稱
這是代碼:
Names Default To Here( 1 );
dt = Current Data Table();
dt << Select Columns( 2 :: 14 );
col = dt << Get Selected Columns( );
val = dt:MaxVal << get values( Format( "Best", 12 ) );
dt:Maximum Value << Set Formula( Max(col) );
nc = (N Items( col ));
For( j = 1, j <= N Items( val ), j++,
xxx = {};
For( i = 1, i <= nc, i++,
If( Contains( char(col[i]), val[j] ),
Insert Into( xxx, char(col[i]) )
)
);
Column( dt, 16 )[j] = xxx;
);
自動化和腳本編寫回覆:跨幾列搜尋每行的最大值和來源列的名稱dt << new column("MaxVal Column", character, set each value(char( col[loc(As List(matrix(col)),:MaxVal)[1] ])));至少對 JMP14 的最後一行提出上述修正:matrix(col) 傳回一個矩陣,loc 函數需要一個列表作為第一個參數,因此矩陣需要轉換為帶有「As list」的列表。
回覆:跨幾列搜尋每行的最大值和來源列的名稱這是解決問題的另一種方法
Names Default To Here( 1 );
dt = Current Data Table();
dt << Select Columns( 2 :: 14 );
col = dt << Get Selected Columns( );
dt << new column("MaxVal", set each value(Max(col)));
dt << new column("MaxVal Column", character, set each value(char(col[loc(matrix(col),:MaxVal)[1]])));
回覆:跨幾列搜尋每行的最大值和來源列的名稱我複製並貼上了一些非常奇怪的腳本,現在我已對其進行編輯以更正一個
回覆:跨幾列搜尋每行的最大值和來源列的名稱@jthi謝謝。 您的程式碼似乎找到了跨列的最大值,我想評估多個列中每行的最大值。 我期待以下結果

回覆:跨幾列搜尋每行的最大值和來源列的名稱有很多方法可以做到這一點。 以下是一個範例,應該可以滿足您的需求:
Names Default To Here(1);
dt = Open("$DOWNLOADS/Sample data.jmp");
col_names = (dt << Get Column Names("String"))[2::(N Cols() - 2)];
m = dt[0, col_names];
Column(dt, "Maximum Value") << Set Values(V Max(m`));
Column(dt, "Maximum Col Name") << Set Data Type("Character");
Column(dt, "Maximum Col Name") << Set Each Value(
max_idx = Loc(m[Row(), 0], :Maximum value)[1];
col_names[max_idx];
);
編輯:複製貼上正確的腳本
Edit2:第二個非常相似的選項:
Names Default To Here(1);
dt = Open("$DOWNLOADS/Sample data.jmp");
Column(dt, "Maximum Col Name") << Set Data Type("Character");
col_names = (dt << Get Column Names("String"))[2::(N Cols() - 2)];
Column(dt, "Maximum Value") << Set Each Value(Max(dt[Row(), col_names]));
Column(dt, "Maximum Col Name") << Set Each Value(
// could use loc max, but as we need maximum value in column, we can just use that with Loc
max_idx = Loc(dt[Row(), col_names], :Maximum value)[1];
col_names[max_idx];
);回覆:跨幾列搜尋每行的最大值和來源列的名稱謝謝這個吉姆!剛剛在 250 列上使用了它。希望你一切順利。
我現在距離德克薩斯州很遠。 地圖。