これは単純な重複の削除ではありません。重複した行を2列に一致した値で削除したいのですが、1列には一意の診療IDがあり、もう1つには疾患の診断年があります。対応する診断年数が互いに1年以内である場合は、一意の診療所ID(つまり患者)の重複が削除されるべきであるという条件を適用したいです。JMPでそのようなことのための任意の規定?例えば、2015年と2016年の診断は1つと見なされるべきであり、2015年は保持されるべきです。 私は成功せずに参加と要約のオプションを試してみました。何か案は?
お返事ありがとうございます。私はJMPの初心者ですが、スクリプトの実行方法がわかりません。このスクリプトのテーブル名と列名をどこに置き換えるかを教えてもらえますか。例:テーブル名 - Preg、カラム名 - 診療所番号、年。
私は助けに感謝します!
これは同じ考えの別の変形です。それはあなたの規則に従って重複を識別します。2015年と2016年については、2015年は保持されます。2014年、2015年、2017年、2018年、2015年、および2017年は保持されますが、2015年、2016年、2017年など2年以上連続した年がある場合は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;
これは私が重複を見つけると信じている小さなスクリプトです。 date列には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";