<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
你好,
這個問題真讓我困惑。
我想進行連接,但在一個表(dt2)中,我還得到了第一個表(dt1)中已經準備好的一些條目。 我想將它們保留在第一個資料表(dt1)中,並想在第二個資料表(dt2)中刪除它們。
我已經嘗試過使用 select where 並在連接之前刪除第二個表中的重複項,但遇到了另一個問題。 我有一個包含所有重複項的列表,但我無法將該列表用作 select where 子句或資料過濾器中的變量
Summarize( a = by(column(dt, "band")),c=count );
變數如下所示:
a = {“2_12_000264_0_9”,“2_12_000265_0_1”,“2_12_000267_0_3”,“2_12_000269_1_3”,“2_12_000269_2110269_111”,007_212_000 ” 0_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_120275_2_1」、「2_12_000276_120275_12」、0076120207002050203;
以及完整的資料過濾器:
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/大類.jmp” ) ;
A = { “凱蒂” , “亨利” , “羅伯特” } ;
df_表達式=表達式( dt <<數據過濾器(新增過濾器(列( :姓名) ,在哪裡( :姓名== A ) ,展示( :姓名,清單顯示) ) ) ) ;
代入( df_表達式,表達式( A ) ,解析(查爾(評估( A ) ) ) ) ;
評估( df_表達式) ;
但是,使用 For Each Row() 可以更有效地編寫基於清單有條件選擇行的腳本。 下面程式碼的結果應與上面相同(資料過濾器視窗除外)。
dt =打開( “$ENGLISH_SAMPLE_DATA/大類.jmp” ) ;
A = { “凱蒂” , “亨利” , “羅伯特” } ;
對於每一行(行狀態(排() ) =選定的狀態(包含( A , :姓名[] ) ) )
選擇重複行後,只需運行dt << 刪除行在連接之前。