Ho provato a cercarlo nella guida di aiuto e sembra che lo stia applicando correttamente, ma non sembra funzionare. Qualcuno potrebbe verificare se mi manca qualcosa?
Ho una colonna che ho creato da un'altra colonna e arrotondato i valori. Devo mantenere solo un intervallo di righe basato sui valori nella nuova colonna. Voglio mantenere solo i valori New Y compresi tra 50000 e 50999 ed eliminare il resto delle righe.
Ecco la parte del mio script che ha questo comando, ma non funziona. Puoi vedere che la riga commentata prima di quella attuale su cui sto lavorando funzionava, ma ora potrebbero esserci altri valori nell'intervallo di 50000 che devo mantenere.
Ho anche allegato il mio intero script, se necessario, come riferimento.
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 ) ) );
Grazie in anticipo per qualsiasi aiuto con questo.
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>
Perfetto, questo ha funzionato. Grazie per l'aiuto!
Ecco la clausola Select Where() che vuoi usare
dt << select where( :New Y <= 50000 | :New Y >= 50999 );
Ciao, non riesco ancora a capire come eliminare tutte le coordinate Y tranne un intervallo specifico. Con l'aggiornamento dall'help precedente questo è il mio nuovo script per la sezione su cui sto lavorando. Quindi devo mantenere solo i valori Y da 50000 a 50999 ed eliminare il resto.
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 ) )
);Sì, ecco uno dei miei set di dati, grazie per l'aiuto!
Oh uomo, grazie. Questo ha senso. Ho sostituito il mio codice con quella nuova riga, ma in realtà non elimina ancora tutte le altre righe che devono essere eliminate, quindi sto solo rappresentando graficamente i valori New Y tra 50000 e 50999. Cos'altro potrei perdermi?
Penso che sia solo un problema di logica.
La tua dichiarazione select where:
dt << select where( :New Y < 50000 & :New Y > 50999 );
non può mai essere vero poiché :New Y non può essere inferiore a 50000 E maggiore di 50999 contemporaneamente.
Invece, vuoi:
dt << select where( 50000 <= :New Y <= 50999 );