이것은 중복의 단순한 제거가 아닙니다. 중복 된 행을 2 열에서 일치하는 값으로 제거하려면 1 열에 고유 한 클리닉 ID가 있고, 다른 하나는 질병 진단 연도입니다. 나는 진단의 해당 년이 서로의 년 이내에 있다면 독특한 클리닉 ID (즉, 환자)에 대한 중복이 제거되어야 conduction을 적용하고 싶습니다. jmp에서 이런 일을하기위한 모든 조항? 예를 들어, 2015 년과 2016 년의 진단은 하나로 간주되어야하며 2015 년은 유지되어야합니다. 나는 성공없이 조인과 요약 옵션을 시도했다. 어떤 아이디어?
답장을 보내 주셔서 대단히 감사합니다. 저는 JMP에서 초보자이며 스크립트를 어떻게 실행해야할지 모르겠습니다. 이 스크립트에서 테이블과 컬럼 이름을 대체 할 위치를 알려주시겠습니까? 예 : 테이블 이름 - Preg, Coulmn 이름 - 클리닉 번호, 연도.
도움에 감사드립니다!
같은 아이디어의 또 다른 변형이 있습니다. 그것은 귀하의 규칙에 따라 중복을 식별합니다. 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;
여기에 복제본을 찾을 수 있다고 생각되는 작은 스크립트가 있습니다. 그것은 날짜 열에 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";