자정을지나 hh : mm 열로 작업하여 경과 시간을 결정합니다.나는 이것이 간단한 문제가 될 것이라고 생각했고, 나는 몇 시간 후에 더 이상 앞서 있지 않습니다. 매우 큰 테이블에 두 개의 열이 있습니다. 하나는 hh : mm 형식의 시간입니다. 다른 하나는 일련의 측정입니다. 모든 측정은 24 시간 동안 (또는 약간 적음) 측정되며 시간은 hh : mm으로 기록됩니다. 실제로 필요한 것은 첫 번째 측정에서 경과 된 시간입니다. 문제는 모든 것이 00:00을 참조하므로 계산이 다음 날인지 모르고 데이터 세트가 너무 커서 하루를 수동으로 추가 할 수 없기 때문에 그 시점에서 계산이 모두 어색해집니다. 모든 생각에 감사드립니다!
내가 찾은 다른 이상한 점은 Excel 파일을 가져 왔는지 또는 Excel 파일을 .txt 파일로 저장하여 가져 왔는지 여부에 따라 데이터 파일이 상당히 다르게 동작한다는 것입니다. 후자는 훨씬 나았습니다.
Re : 자정을 통과하는 hh : mm 열을 사용하여 경과 시간을 결정합니다.1. 시간 열이 문자 열입니까 아니면 JMP 시간 열입니까?
2. 현재 행 시간 값의 감지가 이전 행 값보다 작은 것이 날짜의 증가를 나타내는 지표입니까?Re : 자정을 통과하는 hh : mm 열을 사용하여 경과 시간을 결정합니다. tx 매우 감사합니다.
열은 JMP hh : mm 형식으로 JMP 숫자 연속 형식입니다. 또한 문자로 변환하여 도움이되는지 확인했습니다.
예를 들어 열을 시작하도록 열을 정렬하려고했습니다. 00:00. 그리고 그것은 작동합니다. 그러나 불행히도 16:00 (1 일)의 측정 값은 16:10 (2 일째 수행) 바로 옆에 있습니다.
00:00 임계 값을 초과하자마자 수식 편집기에서 Lag 명령을 사용해 보았습니다. 그런 다음 수식으로 if / the 문을 작성하기 시작했습니다. 그러나 if / then 문을 사용하여 제안한대로 데이터를 토글하는 것에 대해서는 생각하지 않았습니다. 그리고 그때까지 오전 3 시가되어 잠자리에들 시간이라고 생각했습니다.
당신의 생각에 대단히 감사합니다.
베스트,
그렉
Re : 자정을 통과하는 hh : mm 열을 사용하여 경과 시간을 결정합니다.방금 설명보다 문제를 더 잘 보여주는 샘플 테이블을 만들었습니다.
Re : 자정을 통과하는 hh : mm 열을 사용하여 경과 시간을 결정합니다.정확한 Day 값없이 내가 할 수있는 최선의 방법입니다. 아래 JSL은 Time 열의 이전 행 값이 Time 열의 현재 값보다 작은 경우 새 날이 시작되었다고 가정합니다. 이전 응답에서 그렇지 않은 것으로 표시했습니다. 그러나 정확한 Day 값이 없으면 이것이 가능하다고 생각하는 것이 가장 좋습니다. 또한 새 수식 열이 첨부 된 데이터 테이블을 첨부했습니다. 제안 된 공식은 다음과 같습니다.
If( Row() == 1,
dayCounter = 0;
startTime = :Time;
newElapsedtime = 0;
,
If( :Time < Lag( :Time ),
dayCounter
++);
If( dayCounter == 0,
newElapsedtime = :Time - startTime,
newElapsedtime = (In Days( 1 ) - startTime) + In Days( dayCounter ) + :Time
);
);
newElapsedtime;
Re : 자정을 통과하는 hh : mm 열을 사용하여 경과 시간을 결정합니다.다시 감사합니다 tx . 매우 감사!
Re : 자정을 통과하는 hh : mm 열을 사용하여 경과 시간을 결정합니다. tx ,
큰 테이블의 함수가 느릴 수 있다고 생각했기 때문에 대체 솔루션을 찾았습니다. 내 접근 방식은 dif 및 lag 함수를 사용하여 열을 만드는 것입니다. 정액 누적 시간. 다시 말해, 증분 시간 변경 사항을 얻은 다음 요약합니다.
함수에 오류가 있다고 생각하지만 어디에 있는지 잘 모르겠습니다. 테이블을 기간 형식으로 변환했습니다.

여기에 대한 공식이 있습니다 : dif
If( :Time < Lag( :Time, 1 ),
(:Time + 24 * 60 * 60) - Lag( :Time, 1 ),
Dif( :Time, 1 )
)
여기에 대한 공식이 있습니다 : 사정
Sum(Lag(:cum, 1), :Diff)
이것은 이벤트 사이에 24 시간 미만이 있다고 가정합니다.
Jim, 시작 시간으로 1 일을 계산 했으므로 수식에 In Days (dayCounter -1)가 필요하다고 생각합니다.
If( Row() == 1,
dayCounter = 0;
startTime = :Time;
newElapsedtime = 0;
,
If( :Time < Lag( :Time ),
dayCounter
++);
If( dayCounter == 0,
newElapsedtime = :Time - startTime,
newElapsedtime = (In Days( 1 ) - startTime) + In Days( dayCounter - 1 ) +
:Time
);
)
Re : 자정을 통과하는 hh : mm 열을 사용하여 경과 시간을 결정합니다.잘 잡았습니다.
Re : 자정을 통과하는 hh : mm 열을 사용하여 경과 시간을 결정합니다.이것은 불필요 할 수도 있지만 너무 재미 있었고 병렬 assign ()을 사용해야합니다.
Names default to here(1);
dt = current data table();
t = dt:Time << Get Values();
n = nitems(t);
diff = t[2::n]-t[1::(n-1)];
day_break = loc(diff<0); // this will give you last row of the day
// make a matrix n x number of day breaks
m = J(n, nitems(day_break), -1);
parallel assign({db = day_break},
// make the item a 1 if it's row is higher than the corresponding row
m[a, b] = a > db[b];
);
m;
// now just sum the matrix
day = VSum(m`); // +1; // if you want the day to start at 1
dt << New Column("Day", ordinal, <<SET values=""></SET>Re : 자정을 통과하는 hh : mm 열을 사용하여 경과 시간을 결정합니다.멋있는