Problem mit der Nachschlagetabelle / Loc sortiertIch versuche, in dieser Datentabelle den Zeitpunkt zu finden, zu dem der Messwert halb ist. Meine gewünschte Ausgabe wäre eine Übersichtstabelle mit dem Zeitpunkt der Halbmessung nach Stichprobe.

Dies ist die vom Skript generierte Übersichtstabelle. Wie Sie sehen, ist die Halbzeitzeit nicht korrekt.

Ich habe das folgende Skript erstellt, das Loc Sorted verwendet, um die Werte aus dieser Tabelle nachzuschlagen, aber ich habe Schwierigkeiten, es zum Laufen zu bringen. Enthält dieses Skript Fehler? Ist dies die richtige Methode für das, was ich tun möchte, und wenn nicht, hat jemand Vorschläge, wie ich das machen kann? Zu beachten ist, dass der Halbwert möglicherweise nicht genau mit einer Zeit übereinstimmt, daher werde ich nach der Zeit entweder vor oder nach dem Halbmesspunkt suchen.
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])));
Datenzusammenführung und -bereinigungBetreff: Problem mit Lookup-Tabelle / Loc sortiertHier ist meine Meinung zur Lösung des Problems.Es behandelt die Fälle, in denen entweder die maximale Messung eine gerade Zahl ist und daher eine genaue Zeile zum Abrufen der Halbzeit vorhanden ist, oder wenn die maximale Messung eine ungerade Zahl ist, wird der Zeitwert interpoliert, um die Halbzeit zu erhalten Wert
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]);
);
);
Betreff: Problem mit Lookup-Tabelle / Loc sortiert"Loc Sorted" erfordert, dass das erste Argument sortiert wird, um richtig zu funktionieren.

Auf der anderen Seite könnte das Folgende das geben, was Sie wollen, vorausgesetzt, die Mitte existiert unter den Daten.
data table("Data") << new column("is match",
formula(:Measurement == Col Max( :Measurement, :Sample ) / 2)
)
Wenn die Mitte unter den Daten möglicherweise nicht vorhanden ist, überprüfen Sie, ob eine Stichprobe in einen Bereich fällt, den Sie definieren können.