根据条件选择并删除重复行嗨,大家好,
我在论坛上搜索过,但没有接近我想要实现的目标,或者也许我错过了。

无论如何,我需要有关上表的帮助。 可以看出,我有按颜色突出显示的重复项。 大多数零件的序列号是相同的,因为零件在不同的部分进行检查(如图1A、1B、2A、2B、3A、3B、4A、4B所示)。 通常,如果零件未通过检验,则会重新检验,这会显示在重新测试栏中(0 表示不重新测试,1 表示第一次,等等。) 现在我只能通过同一序列号内的重测次数或日期来区分零件,因此我想保留最新的重测结果并删除以前的重复结果。 意思是说,按照上面突出显示的框,对于蓝色或红色,我想保留重新测试 1 并删除重新测试 0。 这对我来说有点头疼,所以我需要社区对脚本的建议,以选择序列号和部分中的条件来找出最新的重新测试,然后保留最新的重新测试并删除以前的重复项。 希望大家对此提出意见。 谢谢
回复:根据条件选择并删除重复行如果您想删除与除一列(或几列)之外的所有列匹配的重复行,这是我的工作解决方案。
优点是不需要指定每个列名。
// delete duplicate rows, where only column ID is different
column_list = dtProcess << Get Column Names( string );
Remove From( column_list, As List( Loc( column_list, "ID" ) ) ); // remove "ID"
dtProcess << Select Duplicate Rows( Match(As List(column_list)));
doublerows = dtProcess << get selected rows;
num_selected = n rows(doublerows);
if(num_selected >0,
dtProcess << delete rows;
print("Removed " || char(num_selected) || " rows from process table.")
,
print("No duplicate rows in process table, excluding column ID.")
);:
回复:根据条件选择并删除重复行很有帮助! 谢谢!
我正在构建一个类似的东西,不知何故我的组合在列选择上出错了。
谢谢你!
回复:根据条件选择并删除重复行我做了一些修改以适合我的桌子。 谢谢!
回复:根据条件选择并删除重复行如果您有早期版本的 JMP, <<选择重复行可能不可用。 然后尝试下面的方法。 代码应选择并删除具有最早日期的重复行(基于匹配的序列号和部分)。 排序并不重要。
dt = Current Data Table();
dt << select where(Col Max(:Date, :SerialNo, :Section) > :Date());
dt << delete rows();
回复:根据条件选择并删除重复行有一个函数叫做
选择重复行()
可以用于此目的,但是它基于查找唯一行之后的行。因此,在使用该函数之前需要对表进行反向排序。下面是执行此操作的示例脚本。由于我没有用于运行此脚本的示例数据表,因此该脚本尚未经过测试,但它非常接近您所需要的。
有关该函数的文档可以在脚本索引中找到
Names Default To Here( 1 );
dt = Current Data Table();
// Add a new column to preserve the current order
dt << New Column( "rowNum", formula( Row() ) );
// Remove the formula to convert values to static values
:rowNum << delete property( "formula" );
// Sort the data table in referse order, since one wants to
// keep the most recent value
dt << sort( by( rowNum ), order( descending ), Replace Table( 1 ) );
// Find the duplicate rows
dt << Select Duplicate Rows( Match( :SerialNo, :Date, :Retest ) );
// Delete Duplicates
dt << delete rows;
// Reorder the table
dt << sort( by( rowNum ), order( ascending ), Replace Table( 1 ) );
// Delete rowNum column
dt << delete columns( "rowNum" );