열을 정렬하고 반복되는 행을 삭제하는 방법<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />JMP 스크립팅이 처음이고 도구 오류 표를 필터링하고 싶습니다. 데이터 세트가 있고 알람 날짜별로 필터링한 다음 반복되는 오류 행을 삭제하고 싶습니다. 예를 들어, 1시에 오류가 발생하고 1시간 내에 4번 반복되는 경우 반복을 삭제하고 오류가 처음 나타날 때만 포착하고 싶습니다.
내 스크립트는 아래에 있으며 알람 날짜(내림차순)별로 반복되는 행을 삭제한 후 스크립트를 다시 작성하고 싶습니다.
dt = 열기("SR_Loop_LAM_002_Alarm_Log.csv");
dt << 정렬((:ENTITY) 기준, 순서(오름차순), 테이블 바꾸기(0));
for (i = nrows (dt), i>0, i--,
if(:ENTITY[i-1]==:ENTITY & :ALARM_ID[i-1] == :ALARM_ID & 날짜 차이(:ALARM_DATE[i-1], :ALARM_DATE , "시간", "분수") < 1,
dt << 행 삭제 (i))
);
dt << 저장("SR_Loop_LAM_002_Alarm_Log.csv");
닫기(dt, 저장 안 함)
Re: 열을 정렬하고 반복되는 행을 삭제하는 방법좋은 반응을 보내주신 모든 분들께 감사드립니다! 내 스크립트를 편집했는데 이제 아름답게 작동합니다.
Re: 열을 정렬하고 반복되는 행을 삭제하는 방법안녕 에반,
주위를 둘러볼 수 있는 방법에는 여러 가지가 있습니다.동일한 알람이 발생한 후 1시간 이내에 발생하는 '중복 항목'을 제거하려는 경우 중복 제거에 대한 특정 문제가 있습니다.이를 위해서는 지연 기능 논리가 필요하며, 이는 실행 전에 데이터를 적절하게 정렬해야 합니다.또한 다음 로직을 실행하기 전에 행을 삭제하면 루프에서 범위를 벗어난 오류가 발생할 수 있습니다.한 가지 해결 방법은 중복 제거를 위한 플래그를 설정하는 것입니다. 이는 부울 열을 생성하거나 일부 내장 기능을 사용하여 수행할 수 있습니다.아래에서는 행 선택을 해당 플래그로 사용하도록 코드를 수정했습니다.알람이 중복되었는지 확인하기 위한 로직이 수행된 후 모든 행이 한 번에 삭제됩니다.화면 I/O를 방지하기 위해 보이지 않는 모드에서 테이블을 열어 속도를 더욱 높였습니다.
/* 실행 속도를 높이기 위해 데이터 테이블을 보이지 않게 만듭니다 */
dt = 열려 있는 ( "SR_Loop_LAM_002_Alarm_Log.csv" , 보이지 않는 ) ;
/* 다중 정렬을 위해 업데이트됨 */
dt << 종류 ( 에 의해 ( : 실재 , : ALARM_DATE ) , 주문하다 ( 오름차순 , 오름차순 ) , 테이블 바꾸기 ( 0 ) ) ;
/* 행과 열 선택을 먼저 지웁니다(좋은 코딩 습관) */
dt << 선택 지우기 ;
dt << 열 선택 지우기 ;
/* 지정된 조건을 만족하는 행을 선택합니다.
이것은 아래에서 위로 진행되기 때문에 루프는 행 1에서 멈춰야 합니다(행 0은 없습니다).
*/
을 위한 ( 나 = N 행 ( dt ) , 나 > 1 , 나 --,
만약에 (
: 실재 [ 나 - 1 ] == : 실재 [ 나 ] &
: ALARM_ID [ 나 - 1 ] == : ALARM_ID [ 나 ] &
날짜 차이 ( : ALARM_DATE [ 나 - 1 ] , : ALARM_DATE [ 나 ] , "시간" , "분수" ) < 1 ,
dt << 행 선택 ( 나 )
)
) ;
/* 선택한 행 삭제 */
dt << 행 삭제 ;
/* 최종 정렬 */
dt << 종류 ( 에 의해 ( \ : ALARM_DATE ) , 주문하다 ( 드 하강 ) , 테이블 바꾸기 ( 0 ) ) ;
dt << 구하다 ( "SR_Loop_LAM_002_Alarm_Log_cleansed.csv" ) ;
닫다 ( dt , 저장하지 않음 ) ;
Re: 열을 정렬하고 반복되는 행을 삭제하는 방법안녕 에반첸870
과거의 이 토론을 살펴보십시오. 스크립트는 "어디에서 행 가져오기"를 사용하기 때문에 삭제에 매우 빠르고 강력합니다.
Re: 루프를 중지합니다.
행운을 빌어요!
Re: 열을 정렬하고 반복되는 행을 삭제하는 방법Lag() 함수를 사용하면 오류가 발생하지 않습니다.
위도(ENTITY )는 저장 열(행)을 ENTITY[i-1]로 가리킵니다.
Re: 열을 정렬하고 반복되는 행을 삭제하는 방법Ian의 빠른 응답에 감사드립니다. 하지만 스크립트는 여전히 제가 원하는 작업을 수행하지 않습니다.
현재 ENTITY, ALARM_DATE, ENTITY_TYPE, ALARM_ID 및 ALARM_DESCRIPTION 열이 있습니다.
1. 먼저 스크립트를 ENTITY, ALARM_DATE 또는 ENTITY_TYPE별로 정렬하고 싶습니다.
2. 그런 다음 if 루프를 사용하여 ALARM_DATE의 시차 1시간 이내에 반복되는 알람(ALARM_DESCRIPTION 기준)을 삭제하고 싶습니다.
3. 마지막으로 원본 테이블을 대체하기 위해 ALARM_DATE(내림차순)로 정렬하고 싶습니다.
그래서 귀하의 제안에 따라 다음으로 변경해야 합니다. (i = nrows(dt), i>1, i--)?
Re: 열을 정렬하고 반복되는 행을 삭제하는 방법거의 다 온 것 같습니다. 'for' 루프는 i=1 값에서 종료되지만 i-1=0을 인덱싱하고 있습니다. JMP 첨자는 항상 1부터 시작합니다.
Re: 열을 정렬하고 반복되는 행을 삭제하는 방법현재 JMP 오류는 "'아래 첨자', "ENTITY[i-1]"의 액세스 또는 평가 시 잘못된 행 번호입니다.