这不是简单的重复删除 - 我想删除重复的行,它们的值匹配在2列 - 1列中,有独特的临床ID,另一个是诊断疾病的年份。如果诊断的相应年份在一年之内,我想应用复制用于独特诊所ID(即患者)的条件。在jmp中有这样的事情的任何规定?例如,2015年和2016年的诊断应视为一个,并应保留2015年。 我尝试了加入和摘要选项但没有成功。有任何想法吗?
非常感谢你的回复。我是JMP的初学者,不知道如何运行脚本。你能告诉我在这个脚本中用表和列名替换的位置吗?例如,餐馆名称 - Preg,Coulmn名称 - 诊所号码,年份。
我很感激帮助!
这是同一想法的另一种变体。它将根据您的规则识别重复项。2015年和2016年将保留2015年;将保留2014年,2015年,2017年,2018年,2015年和2017年,但请注意,如果连续两年超过两年,例如2015年,2016年,2017年,则仅保留2015年。
// Example table
dt = New Table("test",
Add Rows(13),
New Column("Clinic", "Character", Set Values({"A", "A", "B", "B", "C", "C", "D", "D", "E", "E", "E", "E", "E"})),
New Column("Year", Set Values([2016, 2017, 2015, 2016, 2015, 2016, 2015, 2018, 2010, 2011, 2016, 2017, 2018]))
);
// Select multiples based on criteria: same clinic and same or adjacent year
dt << sort(Replace Table, By(:Clinic, :Year));
dt << select where(Col Min(Row(), :Clinic, If(Row() == 1, 0, Dif(:Year)) <= 1) < Row());
// dt << delete rows;
这是一个小脚本,我相信会找到重复的。 它假定日期列中包含JMP日期值。 必须在脚本中更改脚本中使用的列的名称,以匹配数据表中的实际名称。
Names Default To Here( 1 );
dt = Current Data Table();
delList = {};
For( i = 1, i <= N Rows( dt ), i++,
curID = dt:id[i];
curRows = dt << get rows where( :id == curID );
minIDdate = Min( :date[curRows] );
curDateList = As List( :date[curRows] );
minIDRow = (curRows)[Loc( curDateList, minIDdate )];
If( i != minIDRow,
If( :date[i] <= minIDdate + In Years( 1 ),
Insert Into( delList, i )
)
);
);
// dt << delete rows( delList );
// or
dt << New Column( "Duplicate", character );
dt:Duplicate[delList] = "Duplicate";