這不是簡單的重複刪除 - 我想刪除重複的行,它們的值匹配在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";