Ich habe versucht, dies in der Hilfe nachzuschlagen, und es sieht so aus, als würde ich es richtig anwenden, aber es scheint nicht zu funktionieren. Könnte bitte jemand nachschauen, ob mir etwas fehlt?
Ich habe eine Spalte, die ich aus einer anderen Spalte erstellt und die Werte gerundet habe. Ich muss nur einen Bereich der Zeilen behalten, der auf den Werten in der neuen Spalte basiert. Ich möchte nur neue Y-Werte behalten, die zwischen 50.000 und 50.999 liegen, und die restlichen Zeilen löschen.
Hier ist der Teil meines Skripts, der diesen Befehl enthält, aber er funktioniert nicht. Sie können die auskommentierte Zeile sehen, bevor die aktuelle Zeile, an der ich arbeite, funktionierte, aber jetzt könnte es andere Werte im Bereich von 50.000 geben, die ich beibehalten muss.
Als Referenz habe ich bei Bedarf auch mein gesamtes Skript angehängt.
dt = Current Data Table();
Column( dt, "X coordinate" ) << data type( Numeric ) << Modeling Type( Continuous ) << Format( Best, 12 );
dt << New Column( "New Y", Numeric, Nominal, Width( 5 ), Formula( Round( Y coordinate ) ) );
//dt << select where( :New Y != 50503 );
dt << select where( :New Y < 50000 & :New Y > 50999 );
dt << delete rows;
dt << New Column( "Normalized", Numeric, Continuous, Width( 10 ), Precision( 7 ), Formula( IntenCD / Col Max( IntenCD ) ) );
Vielen Dank im Voraus für jede Hilfe dabei.
Clear Symbols();
Names Default To Here( 1 );
framex_value = "";
lotid_value = "";
w = New Window( "Requested Information", // opens a window with a title and this content...
<<RETURN result=""> 50999 );
dt << delete rows;
dt << New Column( "Normalized", Numeric, Continuous, Width( 10 ), Precision( 7 ), Formula( IntenCD / Col Max( IntenCD ) ) );
// Determine Matrix
xMat = Matrix( 76200 - (framex_value / 2) ) |/ Matrix( 76200 - (framex_value / 2) ) |/ Matrix( 76200 + (framex_value / 2) ) |/
Matrix( 76200 + (framex_value / 2) );
// The yMat is static
yMat = [1, 0.92, 0.92, 1];
// The overall delta
overallDelta = Col Max( dt:Normalized ) - Col Min( dt:Normalized );
//The delta between the lines
withinOrangeDelta = Col Max(
If( dt:X coordinate > (76200 - (framex_value / 2)) & dt:X coordinate < (76200 + (framex_value / 2)),
dt:Normalized,
.
)
) - Col Max( dt:Normalized ) - Col Min( dt:Normalized ) + 1;
Col Min( If( dt:X coordinate > (76200 - (framex_value / 2)) & dt:X coordinate < (76200 + (framex_value / 2)), dt:Normalized, . ) );
// Graph Builer and Delta display
gb = dt << Graph Builder(
Size( 534, 456 ),
Show Control Panel( 0 ),
Variables( X( dt:X Coordinate ), Y( dt:Normalized ) ),
Elements( Points( X, Y, Legend( 5 ) ) )
);
Report( gb )[FrameBox( 1 )] << Add Graphics Script(
Pen Color( "orange" );
Pen Size( 2 );
Line( xmat, ymat );
// Add the results to the chart
Text( Boxed, {75000, .94}, "Overall Delta = " || Char( Format( overallDelta, 7, 4 ) ) );
Text( Boxed, {75000, .93}, "Within Frame Delta = " || Char( Format( withinOrangeDelta, 7, 4 ) ) );
);
Report( gb )[AxisBox( 2 )] << Min( .91 );
Report( gb )<<SAVE picture=""></SAVE></RETURN>
Perfekt, das hat funktioniert. Danke für die Hilfe!
Hier ist die Select Where()-Klausel, die Sie verwenden möchten
dt << select where( :New Y <= 50000 | :New Y >= 50999 );
Hallo, ich weiß immer noch nicht, wie ich alle Y-Koordinaten außer einem bestimmten Bereich löschen kann. Mit dem Update der vorherigen Hilfe ist dies mein neues Skript für den Abschnitt, an dem ich arbeite. Daher muss ich nur die Y-Werte von 50.000 bis 50.999 behalten und den Rest löschen.
dt = Current Data Table();
Column( dt, "X coordinate" ) << data type( Numeric ) << Modeling Type( Continuous ) << Format( Best, 12 );
dt << New Column( "New Y", Numeric, Continuous, Width( 10 ), Formula( Round( Y coordinate, 0 ) ) );
//dt << select where( :New Y != 50503 );
dt << select where( 50000 <= :New Y <= 50999 );
dt << delete rows;
dt << New Column( "Normalized",
Numeric,
Continuous,
Width( 10 ),
Precision( 7 ),
Formula( IntenCD / Col Max( IntenCD ) )
);Ja, hier ist einer meiner Datensätze, danke für die Hilfe!
Oh Mann, danke. Das macht durchaus Sinn. Ich habe meinen Code durch diese neue Zeile ersetzt, aber er löscht immer noch nicht alle anderen Zeilen, die gelöscht werden müssen, sodass ich nur die neuen Y-Werte zwischen 50.000 und 50.999 grafisch darstelle. Was könnte mir sonst noch fehlen?
Ich denke, es ist nur ein logisches Problem.
Ihre Select-Where-Anweisung:
dt << select where( :New Y < 50000 & :New Y > 50999 );
kann niemals wahr sein, da :New Y nicht kleiner als 50000 sein kann Und gleichzeitig größer als 50999.
Stattdessen möchten Sie:
dt << select where( 50000 <= :New Y <= 50999 );