지연이 달라지는 다른 열 수준에 대한 열 차이 계산다양한 값을 가진 EVENT(문자-명사) 열이 있습니다. 또한 datetime(숫자-연속) 열이 있습니다. datetime 열은 오름차순으로 정렬되어 있습니다. "CONNECT" 이벤트가 있을 때마다 이 이벤트와 마지막 "DISCONNECT" 이벤트 사이의 시간 차이를 계산하는 또 다른 열이 필요합니다. 문제는 CONNECT와 이전 DISCONNECT 사이의 지연이 다를 수 있다는 것입니다(아래 사진 참조). 또한 이 긴 표 형식을 유지하고 싶습니다. datetime을 오름차순으로 정렬하는 솔루션이 있으면 좋겠지만, 정렬하지 않는 것도 유익할 것입니다.

기본 데이터 분석 및 모델링데이터 탐색 및 시각화Re: 지연이 다른 다른 열 수준에 대한 열 차이 계산예를 들어, 수식에서 변수를 사용하여 마지막 연결 해제 값을 저장할 수 있습니다.
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(12),
Compress File When Saved(1),
New Column("E", Character, "Nominal", Set Values({"A", "B", "Disc", "Con", "A", "B", "C", "B", "Disc", "A", "B", "Con"})),
New Column("T", Numeric, "Continuous", Format("Best", 12), Set Values([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]))
);
dt << New Column("Dif", Numeric, Continuous, Formula(
If(Row() == 1,
last_disc = .;
retval = .;
);
If(:E == "Disc",
last_disc = :T;
retval = .;
, :E == "Con",
retval = :T - last_disc
,
retval = .;
);
retval;
));

Re: 지연이 다른 다른 열 수준에 대한 열 차이 계산이 방법이 효과적이네요. 감사합니다!
Re: 지연이 다른 다른 열 수준에 대한 열 차이 계산행렬을 사용할 수도 있습니다
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(12),
Compress File When Saved(1),
New Column("E", Character, "Nominal", Set Values({"A", "B", "Disc", "Con", "A", "B", "C", "B", "Disc", "A", "B", "Con"})),
New Column("T", Numeric, "Continuous", Format("Best", 12), Set Values([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]))
);
events = :E << get values;
times = :T << get values;
discs = Loc(events, "Disc");
cons = Loc(events, "Con");
difs = J(1, N Rows(dt), .);
difs[cons] = times[cons] - times[discs];
dt << new column("difs", numeric, continuous, values(difs));
여기에는 꽤 많은 가정이 있지만 모든 종류의 극단적인 경우에 대비해 더 견고해질 수 있습니다(Loc Sorted는 이와 같은 경우에 도움이 될 수 있으며, 때로는 KDTable/VPTree도 도움이 될 수 있습니다).
Re: 지연이 다른 다른 열 수준에 대한 열 차이 계산여기에 약간의 주름을 더하기 위해, CONNECT 이벤트가 DISCONNECT 이벤트가 나타나기 전에 몇 번 나타날 수 있는 경우가 있습니다. 이 경우, DISCONNECT 이벤트 뒤에 나타나는 첫 번째 CONNECT 이벤트에서만 차이를 계산하고 싶습니다. 이를 수용할 수 있는 스크립트에 약간의 수정이 있습니까? 도움을 주셔서 다시 한번 감사드립니다.
Re: 지연이 다른 다른 열 수준에 대한 열 차이 계산@jthi 코드를 수정하여 이 문제를 처리하도록 했습니다.
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(12),
Compress File When Saved(1),
New Column("E", Character, "Nominal", Set Values({"A", "B", "Disc", "Con", "A", "B", "C", "B", "Disc", "A", "B", "Con"})),
New Column("T", Numeric, "Continuous", Format("Best", 12), Set Values([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]))
);
dt << New Column("Dif", Numeric, Continuous, Formula(
If(Row() == 1,
last_disc = .;
retval = .;
);
If(:E == "Disc",
last_disc = :T;
retval = .;
firstCon = .;
, :E == "Con",
If(ismissing(firstcon), firstcon=:t);
retval = firstcon - last_disc
,
retval = .;
);
retval;
));
JMP 도움말에서 제공되는 스크립팅 가이드를 읽어볼 시간을 내는 것이 좋습니다. 또한 토론 포럼 회원이 응답한 코드를 연구할 시간을 내주세요. Jarmo 스크립트의 수정에는 새로운 스크립팅 지식이 필요하지 않았습니다. 스크립트 흐름에 추가 로직을 추가하기만 하면 되었습니다. 사용자가 스크립트를 직접 개선할 수 있는 것이 목표여야 합니다.