Intenté buscar esto en la guía de ayuda y parece que lo estoy aplicando correctamente, pero parece que no funciona. ¿Podría alguien comprobar si me falta algo?
Tengo una columna que creé a partir de otra columna y redondeé los valores. Necesito mantener solo un rango de filas basado en valores en la nueva columna. Quiero mantener solo los valores de New Y que están entre 50000 y 50999 y eliminar el resto de las filas.
Aquí está la parte de mi script que tiene este comando, pero no funciona. Puede ver la línea comentada anterior a la actual en la que estoy trabajando, esto estaba funcionando, pero ahora podría haber otros valores en el rango de 50000 que debo mantener.
También adjunté mi guión completo si es necesario como referencia.
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 ) ) );
Gracias de antemano por cualquier ayuda con esto.
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>
Perfecto, eso hizo el truco. ¡Gracias por la ayuda!
Aquí está la cláusula Select Where() que desea usar
dt << select where( :New Y <= 50000 | :New Y >= 50999 );
Hola, todavía no puedo entender cómo eliminar todo menos un rango específico de coordenadas Y. Con la actualización de la ayuda anterior, este es mi nuevo script para la sección en la que estoy trabajando. Por lo tanto, necesito mantener solo los valores Y de 50000 a 50999 y eliminar el 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í, aquí está uno de mis conjuntos de datos, ¡gracias por la ayuda!
Oh hombre, gracias. Eso tiene sentido. Reemplacé mi código con esa nueva línea, pero todavía no elimina todas las demás filas que deben eliminarse, por lo que solo estoy graficando los valores de New Y entre 50000 y 50999. ¿Qué más podría estar perdiéndome?
Creo que es solo un problema de lógica.
Su declaración select where:
dt << select where( :New Y < 50000 & :New Y > 50999 );
nunca puede ser cierto ya que: New Y no puede ser inferior a 50000 y mayor que 50999 al mismo tiempo.
En cambio, quieres:
dt << select where( 50000 <= :New Y <= 50999 );