如何判断重复值?大家好,
我有这段代码,但我不太确定是否有更合适的方法。我的循环出错,因为某些数据表有多个 NBO 值。
访问或评估“For Each”时第 10 行的数据超出范围,For Each/###*/({table}, dt_Test, table << New Column( "Ref" ) ; Wait( 0 ) ; table
:Ref[table << 获取行,其中( :Lot == "NBO" & :N Rows == Col Max( :N Rows, :Lot ) )]
= 1)
因此,我尝试在 For Each 循环内创建一个 If 语句。IF 语句将确定 NBO 在 Lot 列上是否没有重复项,如果没有重复项,则它将在 Ref 列上放置 1。
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;
);
);
自动化和脚本视窗回复:如何确定重复值并删除具有最低 N 行值的数据?如果我们能看到一些数据,这一切就会变得容易得多。
回复:如何确定重复值并删除具有最低 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[table << 获取行,其中( :Lot == "NBO" & :N Rows == Col Max( :N Rows, :Lot ) )]
= 1)
回复:如何确定重复值并删除具有最低 N 行值的数据?我对您的脚本和您要做的事情有点困惑。您是想找到重复的批次并删除最后一行以外的所有内容吗?然后将 NBO 设置为 1(应该只剩下一个)?
回复:如何确定重复值并删除具有最低 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[table << 获取行,其中( :Lot == "NBO" & :N Rows == Col Max( :N Rows, :Lot ) )]
= 1)
回复:如何确定重复值并删除具有最低 N 行值的数据?也许问题出在其他地方?例如,dt_test 包含什么?dt_test 和 table 的使用方式有点奇怪(此外,if 可能没有按照您的想法执行)

我会稍微修改一下你的代码,以便于调试(不要将获取行放在 [] 内)
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 是你的叔叔 - 你就有了再次执行此操作的脚本。脚本......无需脚本。
回复:如何确定重复值?不错的技巧:)