你好,
JMP 新手,已經搜索並閱讀了大量幫助並兜圈子。 我認為我所做的事情是簡單直接的,但 JSL 卻沒有這種感覺。 我有一個更複雜的數據表,但為了讓我的代碼正常工作,我簡化了我的表。 我有一個包含 5 列的表格,其中 4 列的標題中包含“_Yield”。 13 行由 1 和 0 組成,我想要做的是為每一行創建一個列,顯示產量列中第一次出現的 1。 我需要它是智能的,因為列名稱(包含 _yield 除外)並不總是具有相同的名稱或位於相同的位置。 我已經弄清楚如何查看產量列並將其轉換為矩陣,然後我可以在其中找到我正在尋找的值。 我只是無法將這些值轉換為列標題。 測試列顯示矩陣中的位置,下面的結果列顯示我應該在幫助列中獲得的內容。提前致謝。

dt = Current Data Table();
lst = dt << Get Column Names(string);
dt << clear column selection;
For(i = 1, i <= N Items(lst), i++,
If(Contains(lst[i], "_Yield") > 0,
Column(dt, lst[i]) << set selected;
selcols = dt << get selected columns;
)
);
Mat2 = dt << Get as Matrix(selcols);
DesList = List();
For(i = 1, i <= N Rows(Mat2), i++,
Pos = Min(Loc(Mat2[i, 0]));
Insert Into(DesList, Pos);
);
dt << New Column("Test", Numeric, Continuous, <<SET values="">= 1);
If(
result >= 1, (newcolumn[j] = selcols),
Is Missing(result), (newColumn[j] = Parse("PASS"))
);
);</SET>嗨,jthi,
感謝您的回复。 Filter Each 對我來說不是一個活躍的功能。 也許是因為我使用的是 V15,但我能夠使用當前的方式通過您的 one_idx 方程選擇列名稱,並且它很有效。 上週我一直在努力使用 Loc 函數,所以這確實很有幫助。
一個例子:
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(3),
New Column("Column 1", Numeric, "Continuous", Format("Best", 12), Set Values([0, 0, 1, 0])),
New Column("A_YIELD", Numeric, "Continuous", Format("Best", 12), Set Values([0, 0, 1, 0])),
New Column("B_YIELD", Numeric, "Continuous", Format("Best", 12), Set Values([1, 0, 0, 0])),
New Column("C_YIELD", Numeric, "Continuous", Format("Best", 12), Set Values([1, 1, 1, 0]))
);
// Get column names which end in _YIELD
yield_cols = Filter Each({col_name}, dt << Get Column Names("Continuous", "String"),
Ends With(col_name, "_YIELD");
);
// create new column to get _YIELD column name
dt << New Column("RESULT", Character, Nominal, << Set Each Value(
one_idx = Loc(dt[Row(), yield_cols], 1);
If(N Items(one_idx),
yield_cols[Min(one_idx)];
,
"PASS"
);
));
