排除選定的列你好,
我從源中獲取不同的列列表,並在數據表中選擇這些列。 數據表有許多其他列,但我想隱藏/排除在我的腳本運行並進行一些分析時不在提供給我的列表中的列...
我可以通過下面的行選擇我不需要的所有列:
dt < <反轉列選擇 (Provided_List)
下一步:排除這些選定的列。 我怎麼做?
從腳本書上,我可以看到列(“X”)<<排除(1)將排除名稱為 X 的列,但是有沒有一種方法可以排除已選擇的列?
謝謝。
回复:排除選定的列這是因為關聯數組將保存鍵值對,並且很可能當您直接將選擇列與關聯數組一起使用時,它並不真正知道要做什麼。 通常它不應該選擇任何內容,然後反轉它會選擇所有列(在某些情況下,關聯數組的計算結果可能為 1,因此它會選擇第一列)。
要從關聯數組中獲取它們的鍵,您可以使用 << get keys。
Names Default To Here(1);
cols_list = {"Col A", "Col B"};
cols_aa = Associative Array({"Col A", "Col B"});
Show(cols_list);
Show(cols_aa);
Show(cols_aa << get keys);
您可以從 JMP 幫助頁面閱讀有關關聯數組的更多信息腳本編寫指南 > 數據結構 > 關聯數組。 在這種情況下,由於它們的集合操作,我可能會使用它們
回复:排除選定的列謝謝您的回复,jthi!太快了!
剛剛看到你的回复。 我一直在嘗試不同的事情,並想出了一個非常簡單的兩行解決方案。
cols = {"Col A", "Col B"};
dt << Select Columns(cols) << Invert Column Selection;我從未見過使用關聯數組,當我嘗試使用一個關聯數組來代替當前的 col 時,“選擇列”選擇了不在 cols 中的一列,但只是反向選擇中的 1 列。 奇怪的。你知道為什麼會這樣嗎?
cols = Associative Array({"Col A", "Col B"});
dt << Select Columns(cols) << Invert Column Selection;回复:排除選定的列您應該在 for 循環中使用 N Items(col_names) 而不是 N Items(dt)。
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
col_names = {"age", "sex", "weight"};
for( i = 1, i <= N Items(col_names), i++,
Column( dt, col_names[i] ) << set selected;
);
dt << Invert Column Selection;
您還可以使用“選擇列”使代碼更簡單
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
col_names = {"age", "sex", "weight"};
wait(1); // for demo purposes
dt << Select Columns(col_names);
wait(1); // for demo purposes
dt << Invert Column Selection;
您還可以通過直接選擇正確的列來避免反轉,但這很可能更難以理解
Names Default To Here(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
col_names = Associative Array({"age", "sex", "weight"});
all_col_names = Associative Array(dt << Get Column Names("String"));
all_col_names << Remove(col_names);
dt << Select Columns(all_col_names << get keys);回复:排除選定的列很抱歉復活這個帖子,但我有同樣的問題,我想知道這種方法是否有效以及如何改進它:
//List of wanted columns<BR />col_names = (":Col A", ":Col B", etc);
<BR />//Iterates through list and uses the string names to identify and select
for( i = 1, i <= N Items(dt), i++,
Column( dt, col_names[i] ) << set selected
);
dt << Invert Column Selection</CODE></P></LINGO-BODY><LINGO-SUB id="lingo-sub-73693" slang="en-US" mode="NONE">回复:排除選定的列</LINGO-SUB><LINGO-BODY id="lingo-body-73693" slang="en-US" mode="NONE"><P>謝謝!!! 我也明白了,但時間有點長。 太棒了 :)</P></LINGO-BODY><LINGO-SUB id="lingo-sub-73657" slang="en-US" mode="NONE">回复:排除選定的列</LINGO-SUB><LINGO-BODY id="lingo-body-73657" slang="en-US" mode="NONE"><P>以下是如何執行此操作的語法:</P>
<PRE><CODE class=" language-jsl">Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/big class.jmp" );
Column( dt, 4 ) << set selected( 1 );
Column( dt, 5 ) << set selected( 1 );
selcols = dt << get selected columns;
For( i = 1, i <= N Items( selcols ), i++,
Column( dt, selcols[i] ) << exclude( 1 )
);