조회 테이블 / Loc 정렬 문제이 데이터 테이블에서 측정값이 절반이 되는 시간을 찾으려고 합니다. 내가 원하는 출력은 샘플에 의한 절반 측정 시 시간이 있는 요약 테이블입니다.

이것은 스크립트에 의해 생성된 Summery 테이블이며 볼 수 있듯이 반 측정 시간이 정확하지 않습니다.

이 테이블에서 값을 조회하기 위해 정렬된 Loc을 사용하는 다음 스크립트를 만들었지만 작동시키는 데 어려움이 있습니다. 이 스크립트에 오류가 있습니까? 이것이 내가 하려는 일에 적합한 방법이고 그렇지 않은 경우 내가 어떻게 할 수 있는지에 대한 제안이 없는 사람이 있습니까? 한 가지 주의할 점은 절반 값이 시간과 정확히 일치하지 않을 수 있으므로 절반 측정 지점 전후의 시간을 찾을 것입니다.
Names Default To Here(1);
Data Table( "Data" ) << Summary(
Group( :Sample, ),
Max( :Measurement ),
Freq( "None" ),
Weight( "None" )
);
New Column( "Half Max Measure", Formula (:Name("Max(Measurement)") / 2));
New Column( "Time At Half Measurement", Format ("h:m"), Formula(
dt = Data Table( "Data" );
If(dt:Sample == Sample,
Bracket = Loc Sorted( dt:Measurement << getvalues, :Half Max Measure );
dt:Time[Bracket])));
데이터 테이블스크립팅Re: 조회 테이블 문제 / 정렬된 Loc"Loc Sorted"가 제대로 작동하려면 정렬된 첫 번째 인수가 필요합니다.

반면에 데이터 사이에 중간이 있다고 가정하면 다음과 같이 원하는 것을 얻을 수 있습니다.
data table("Data") << new column("is match",
formula(:Measurement == Col Max( :Measurement, :Sample ) / 2)
)
데이터 사이에 중간이 없을 경우 샘플이 정의할 수 있는 범위에 속하는지 확인합니다.
Re: 조회 테이블 문제 / 정렬된 Loc다음은 문제 해결에 대한 나의 견해입니다.Max Measurement가 짝수이므로 Half Time을 가져올 정확한 행이 존재하거나 Max Measurement가 홀수인 경우 Time 값을 보간하여 Half Time을 계산하는 경우를 처리합니다. 값
Names Default To Here( 1 );
dt = Data Table( "Data" );
dtSum = dt << Summary(
Group( :Sample, ),
Max( :Measurement ),
Freq( "None" ),
Weight( "None" ),
Link to Original Data Table( 0 ),
Output Table( "The Summaries" )
);
dtSum << New Column( "Half Max Measure", Set Each Value( :Name( "Max(Measurement)" ) / 2 ) );
dtSum << New Column( "Time At Half Measurement", Format( "h:m:s" ) );
// Get the Half Max Measure
For( i = 1, i <= N Rows( dtSum ), i++,
theRow = dt << get rows where(
dt:Sample == dtsum:Sample[i] & dt:Measurement == dtSum:Half Max Measure[i]
);
If( N Rows( theRow ) > 0,
dtSum:Time At Half Measurement[i] = dt:Time[theRow[1]]
,
// No Measurement was taken at exact Half Time, so interprolate the finding
rowBefore = Max(
dt << get rows where(
dt:Sample == dtsum:Sample[i] & dt:Measurement > dtSum:Half Max Measure[i]
)
);
rowAfter = Min(
dt << get rows where(
dt:Sample == dtsum:Sample[i] & dt:Measurement < dtSum:Half Max Measure[i]
)
);
ratio = (dt:Measurement[rowBefore] - dtSum:Half Max Measure[i]) / (dt:Measurement[
rowBefore] - dt:Measurement[rowAfter]);
dtSum:Time At Half Measurement[i] = dt:Time[rowBefore] + ratio * (dt:Time[rowAfter] -
dt:Time[rowBefore]);
);
);