<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
你好,
这个问题真的让我很困惑。
我想进行连接,但在一个表 (dt2) 中我还得到了一些条目,我已经在第一个表 (dt1) 中准备好了。 我想保留第一个数据表 (dt1) 中的那些,并想在第二个数据表 (dt2) 中删除它们。
我已经尝试过并在连接之前使用选择位置并删除第二个表中的重复项时遇到另一个问题。 我有一个包含所有重复项的列表,但我不能将该列表用作 select where 子句或数据过滤器中的变量
Summarize( a = by(column(dt, "band")),c=count );
变量看起来像这样:
一个= {“2_12_000264_0_9”,“2_12_000265_0_1”,“2_12_000267_0_3”,“2_12_000269_1_3”,“2_12_000269_2_1”,“2_12_000270_1_7”,“2_12_000270_2_5”,“2_0027”,“2_027” _000272_1_9", "2_12_000272_2_7", "2_12_000273_1_1", "2_12_000273_2_8" , "2_12_000274_0_4", "2_12_000275_1_3", "2_12_000275_2_1", "2_12_000276_1_4", "2_12_000276_2_2"};
和完整的数据过滤器:
dt2 << Data Filter( Add Filter( columns( :Bandname ), Where( :Bandname == {"2_12_000264_0_9", "2_12_000265_0_1", "2_12_000267_0_3", "2_12_000269_1_3", "2_12_000269_2_1", "2_12_000270_1_7", "2_12_000270_2_5", "2_12_000271_0_1", "2_12_000272_1_9", "2_12_000272_2_7", "2_12_000273_1_1", "2_12_000273_2_8", "2_12_000274_0_4", "2_12_000275_1_3", "2_12_000275_2_1", "2_12_000276_1_4", "2_12_000276_2_2"}), Display( :Bandname, Size( 221, 259 ), List Display ), Mode( Show( 1 ) ) ));
但是使用变量不起作用:
Add Filter( columns( :Bandname ), Where( :Bandname == a ), Display( :Bandname, Size( 221, 259 ), List Display ), Mode( Show( 1 ) ) ));
为什么??
但主要问题是上述问题,在连接之前删除重复项。
提前致谢
非常感谢,这很好用......你的第一个代码非常适合理解 jsl
我不知道为什么,但在某些情况下,即使对明文列表进行了完美评估,JSL 也不会解析列表变量。
解决这个问题的一种方法是使用表达式并在评估之前将已解析的列表替换到其中。 这是一个数据过滤器示例:
dt =打开( “$ENGLISH_SAMPLE_DATA/Big Class.jmp” ) ;
A = { “凯蒂” , “亨利” , “罗伯特” } ;
df_expr =表达式( dt <<数据过滤器(添加过滤器(列( :姓名) ,在哪里( :姓名== A ) ,展示( :姓名,列表显示) ) ) ) ;
代入( df_expr ,表达式( A ) ,解析(字符(评价( A ) ) ) ) ;
评估( df_expr ) ;
但是,使用 For Each Row() 可以更有效地编写基于列表的有条件选择行的脚本。 下面代码的结果应该与上面的相同(数据过滤器窗口除外)。
dt =打开( “$ENGLISH_SAMPLE_DATA/Big Class.jmp” ) ;
A = { “凯蒂” , “亨利” , “罗伯特” } ;
对于每一行(行状态(排() ) =选定状态(包含( A , :姓名[] ) ) )
选择重复行后,只需运行dt << 删除行在连接之前。