분 데이터 분석기 상태 값 (문자 값)의 큰 시계열 (~ 250,000)이 있습니다. 분석기가 정상적으로 작동 할 때는 값이 정상이고 교정 중에는 CALIB입니다. 교정은 매일 발생하지만 다양한 시간 (매일 같은 시간이 아님)에 발생하며 일반적으로 약 30 분 동안 다양한 지속 시간 동안 지속됩니다. 1 분 데이터 포인트마다 타임 스탬프가 지정됩니다. 각 보정 기간 (일정 일 동안 cal 상태 CALIB 시작부터 cal 상태 끝 CALIB까지)에 고유 식별자를 할당하고 각 보정 기간의 시작 및 종료 시간이있는 테이블을 생성해야합니다.
저는 JSL의 완전한 초보자입니다. 누구든지 JSL로 어떻게 이것을 달성 할 수 있는지에 대한 예를 제공 할 수 있습니까?
도움을 주셔서 감사합니다.
하나의 접근법을 찾으십시오 (많은 것을 의심하지 마십시오). 요약 테이블을 사용하면 소스 테이블에 링크 할 수있어 유용 할 수 있습니다. '파일> 새로 만들기> 새 스크립트'를 수행하고 아래 코드를 잘라 붙여 넣은 다음 '편집> 스크립트 실행'을 수행하십시오.
NamesDefaultToHere(1);
// Make some fake data to play with
n = 1000;
startDate = Date DMY( 01, 1, 2016 );
endDate = Date DMY( 12, 10, 2016 );
dates = Sort Ascending(J( n, 1, Random Integer(startDate, endDate) ) );
status = J( n, 1, Random Integer(1, 2) );
dt1 = New Table( "Callibrations",
New Column( "Date", Numeric, "Continuous", Format( "ddMonyyyy h:m", 35 ), Set Values( dates )),
New Column( "Status", Numeric, "Nominal", Set Values( status ), Value Labels( {1 = "NORMAL", 2 = "CALIB"} ) )
);
/************************************************************************************************/
/* Start here . . . */
/************************************************************************************************/
dt1 = CurrentDataTable();
// Define a column that increments when the 'Status' changes:
// https://community.jmp.com/t5/Discussions/Formula-for-automatic-counter-by-group-of-rows/td-p/20120
dt1 << New Column( "Counter", Numeric, "Ordinal", Formula( If( Row() == 1, 1, Lag( :Counter, 1 ) + (Lag( :Status, 1 ) != :Status)) ) );
// Get the start dates
dt1 << New Column( "Start Date", Numeric, "Continuous", Format( "ddMonyyyy h:m", 35 ), Formula( Col Min( :Date, :Counter ) ));
// Get the end dates
dt1 << New Column( "End Date", Numeric, "Continuous", Format( "ddMonyyyy h:m", 35 ), Formula( Col Max( :Date, :Counter ) ));
// Make the required summary table
dt2 = dt1 << Summary(
Group( :Counter, :Status ),
Min( :Start Date ),
Max( :End Date ),
statistics column name format( "column" ),
output table name( "Calibration Periods" )
);
dt2 << deleteProperty("Source");