如何確定重複值?大家好,
我有這段程式碼,但我不確定是否有更合適的方法。我的循環出現錯誤,因為某些數據表具有多個 NBO 值。
存取或評估 'For Each' 時第 10 行的資料超出範圍,For Each/*###*/({table}, dt_Test, table << New Column( "Ref" ) ; Wait( 0 ) ; table
:Ref[表 << 取得行 where( :Lot == "NBO" & :N Rows == Col Max( :N Rows, :Lot ) )]
= 1)
所以我想做的是在 For Each 迴圈內建立一個 If 語句。 IF 語句將決定 NBO 在 Lot 欄位上是否沒有重複項,如果沒有重複項,則將 1 放在 Ref 欄位上。
For Each( {table}, dt_Test,
table << New Column("Ref");
wait(0);
If (
//NBO has duplicate, deletes the NBO with lowest N Row value
dt_Test << Select duplicate rows(Match(:Lot)); //only selects the matching values, how can I delete the NBO with lowest N Rows count?
dt_Test << Delete Rows;
,
//if NBO has no duplicates,
table:Ref[table << get rows where( :Lot == "NBO" & :N Rows == col max(:N Rows, :Lot))]=1;
);
);
自動化和腳本編寫視窗Re: 如何判斷重複值並刪除N行值最低的資料?如果我們能看到一些數據,事情就會變得容易得多。
Re: 如何判斷重複值並刪除N行值最低的資料?這是子集之後的範例資料表。 dt 有 2 個 NBO,效果很好。
table:Ref[table << get rows where( :Lot == "NBO" & :N Rows == col max(:N Rows, :Lot))]=1;
然而,在 dt2 中,我有 1 個 NBO,腳本突然停止並出現以下錯誤:
存取或評估 'For Each' 時第 10 行的資料超出範圍,For Each/*###*/({table}, dt_Test, table << New Column( "Ref" ) ; Wait( 0 ) ; table
:Ref[表 << 取得行 where( :Lot == "NBO" & :N Rows == Col Max( :N Rows, :Lot ) )]
= 1)
Re: 如何判斷重複值並刪除N行值最低的資料?我對你的腳本和你想要做的事情有點困惑。您是否試圖找到重複的批次並刪除除最後一行之外的所有內容?然後將NBO設定為1(應該只剩下一個了)?
Re: 如何判斷重複值並刪除N行值最低的資料?抱歉,我寫這個問題也很困惑。因此,對於數據,首先我將對其進行子集化,然後遍歷每個數據表以添加列 Ref 及其值為 1,其中 NBO 在 N 行中具有最高計數。我最初得到這份工作:
For Each( {table}, dt_Test,
table << New Column("Ref");
wait(0);
table:Ref[table << get rows where( :Lot == "NBO" & :N Rows == col max(:N Rows, :Lot))]=1;
);但是,當它循環到列中僅存在 1 個 NBO 的資料表時,出現以下錯誤:
存取或評估 'For Each' 時第 10 行的資料超出範圍,For Each/*###*/({table}, dt_Test, table << New Column( "Ref" ) ; Wait( 0 ) ; table
:Ref[表 << 取得行 where( :Lot == "NBO" & :N Rows == Col Max( :N Rows, :Lot ) )]
= 1)
Re: 如何判斷重複值並刪除N行值最低的資料?也許問題出在其他地方?例如,dt_test 包含什麼?而且 dt_test 和 table 的使用方式有點奇怪(而且 if 可能不會按照您的想法進行操作)

我會稍微修改您的程式碼以使其更容易調試(不要將 get rows 放在 [] 內)
Names Default To Here(1);
dt = Open("$DOWNLOADS/dt.jmp");
dt2 = Open("$DOWNLOADS/dt2.jmp");
dts = Eval List({dt, dt2});
For Each({cur_dt}, dts,
cur_dt << New Column("Ref");
//cur_dt = dts[2];
sel_rows = cur_dt << get rows where(:Lot == "NBO" & :N Rows == Col Max(:N Rows, :Lot));
cur_dt:Ref[sel_rows] = 1;
);
這樣你就可以列印 sel_rows 並查看它是否為空/它有什麼
回覆:如何確定重複值?我可能會建議一種完全不同的方法。
1. 按日期對表格進行排序,或按任何告訴您最新重複項的內容進行排序。
2. 將表與其自身連接(表>連接),然後按一下刪除多個選項
- 只有第一個(按行順序)重複項最終出現在產品表中。
在打開工作流程建立器的情況下手動執行一次此操作,然後 Bang - Bob 是你的叔叔 - 你已經有了可以再次執行此操作的腳本。腳本...沒有腳本。
回覆:如何確定重複值?不錯的把戲:)