排除选定的列你好,
我从源中获取不同的列列表,并在数据表中选择这些列。 数据表有许多其他列,但我想隐藏/排除在我的脚本运行并进行一些分析时不在提供给我的列表中的列...
我可以通过下面的行选择我不需要的所有列:
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 )
);