Comparación de celdas con salida condicionalHola,
Estoy tratando de crear un contar de ocurrencias basadas en condiciones, utilizando la siguiente tabla como ejemplo. Las condiciones para un conteo de 1 son que las columnas "Parámetro" Y "Ubicación" se repiten juntas en la siguiente fila O en cualquier otro lugar de las 2 columnas. La tabla de salida tendría los mismos datos de columna presentes en la tabla original con 3 columnas agregadas de "Recuento", "Herramienta 1", "Herramienta 2" (la cantidad de herramientas puede aumentar a 5).

La salida para esta tabla sería la siguiente. Dado que las filas 3 y 4 se repiten según la condición de la columna 2 (parámetro y ubicación) que sería un conteo de 1, luego se repite nuevamente con las mismas condiciones que sería el segundo conteo para un total de 2. La fila a mostrar dependería de la primera de 3 filas por orden de fecha. Finalmente, la columna Herramienta también se completaría por orden de fecha (es decir, la Herramienta 1 (o E) entró primero a la 1:10 p. m., luego la Herramienta 2 (o F) entró a las 2:10 p. m.), etc.

Tabla de datosRe: Comparación de celdas con salida condicionalAquí hay un script que debería darle un buen comienzo en su conversión de datos
Names Default To Here( 1 );
// Create a sample table
dt = New Table( "Sample",
Add Rows( 6 ),
Set Header Height( 46 ),
New Column( "Date/Time",
Numeric,
"Continuous",
Format( "y/m/d h:m", 19 ),
Input Format( "y/m/d h:m" ),
Set Values( [3273127800, 3273124200, 3273142200, 3273138600, 3273152400, 3273149400] )
),
New Column( "Parameter", Character, "Nominal", Set Values( {"A.1", "A.2", "A.3", "A.3", "A.2", "A.3"} ) ),
New Column( "Location", Character, "Nominal", Set Values( {"B.1", "B.2", "B.3", "B.3", "B.1", "B.3"} ) ),
New Column( "Process", Character, "Nominal", Set Values( {"C.1", "C.2", "C.3", "C.3", "C.1", "C.3"} ) ),
New Column( "Tool", Character, "Nominal", Set Values( {"E.", "E", "F", "E", "E", "G"} ), Set Display Width( 43 ) ),
New Column( "Part", Character, "Nominal", Set Values( {"F-1.1", "F-1.2", "F-1.1", "F-1.1", "F-1.1", "F-1.1"} ) )
);
// The calculation script starts here
// Calculate the Counts
dtSum = dt << Summary(
Group( :Parameter, :Location ),
Freq( "None" ),
Weight( "None" ),
Link to original data table( 0 ),
output table name( "Summary" )
);
// Delete rows that have no matches
dtSum << select where( dtSum:N Rows == 1 );
If( N Items( dtSum << get selected rows ) > 0,
dtSum << delete Rows
);
// The count is equal to how many rows, not how many matches so subtract 1 to count the matches
For Each Row(
dtSum:N Rows = dtSum:N Rows - 1;
);
dtSum:N Rows << set name("Count");
// Create a new table from original that contains only the data with matches
dtJoin = dt << Join(
With( dtSum ),
Merge Same Name Columns,
Match Flag( 0 ),
By Matching Columns( :Parameter = :Parameter, :Location = :Location ),
Drop multiples( 0, 0 ),
Include Nonmatches( 0, 0 ),
Preserve main table order( 1 ),
Output Table( "Joined" )
);
// Sort the data to set tool usage order
dtJoin << Sort( By( :Parameter, :Location, :"Date/Time"n), Replace Table(1));
// Create a new column for tool order
dtJoin << New Column("Tool Col", character, set each value(
"Tool " || Char( Col Cumulative Sum(1, :Parameter, :Location))
));
// Split the data to the final output for
dtFinal = dtJoin << Split(
Split By( :Tool Col ),
Split( :Tool ),
Group( :Parameter, :Location ),
Output Table( "Final" ),
Sort by Column Property
);
// Clean up
close( dtSum, nosave );
close( dtJoin, nosave );
La documentación sobre las distintas plataformas y funciones se documenta en el Índice de secuencias de comandos y en la Guía de secuencias de comandos.Ambos están disponibles en el menú desplegable Ayuda.
Re: Comparación de celdas con salida condicionalHola,
*Creo* que veo lo que estás buscando, pero como menciona Jim, más contexto es mejor. Lo siguiente produce el resultado que describe, para los datos que ha proporcionado, pero dado que solo hay 1 línea de salida para continuar ... es solo una suposición. Supongo, según la entrada y la salida que proporcionó, que además del parámetro y la ubicación, el proceso y la parte TAMBIÉN se usan como variables de agrupación (?), y que Count siempre será 1 menos que n Filas en un resumen de los datos . Estos son bastante fáciles de cambiar en el código a continuación si no es el caso, pero de nuevo... solo una suposición.
En cualquier caso, intente esto para ver si es lo que necesita y, si no lo es, es de esperar que esté a una modificación de código rápido de lo que desea.
Salud,
Brady
Names Default To Here( 1 );
dt = New Table( "Sample",
Add Rows( 6 ),
Set Header Height( 46 ),
New Column( "Date/Time",
Numeric,
"Continuous",
Format( "y/m/d h:m", 19 ),
Input Format( "y/m/d h:m" ),
Set Values( [3273127800, 3273124200, 3273142200, 3273138600, 3273152400, 3273149400] )
),
New Column( "Parameter", Character, "Nominal", Set Values( {"A.1", "A.2", "A.3", "A.3", "A.2", "A.3"} ) ),
New Column( "Location", Character, "Nominal", Set Values( {"B.1", "B.2", "B.3", "B.3", "B.1", "B.3"} ) ),
New Column( "Process", Character, "Nominal", Set Values( {"C.1", "C.2", "C.3", "C.3", "C.1", "C.3"} ) ),
New Column( "Tool", Character, "Nominal", Set Values( {"E.", "E", "F", "E", "E", "G"} ), Set Display Width( 43 ) ),
New Column( "Part", Character, "Nominal", Set Values( {"F-1.1", "F-1.2", "F-1.1", "F-1.1", "F-1.1", "F-1.1"} ) )
);
/////////////////BEGIN PROCESSING
//create a summary table
dtSum = dt << summary( group(:parameter, :location, :"Date/Time"n, :process, :tool, :part), Link to original data table( 0 ) );
//create a column for easy group navigation
dtSum << new column ("plpp", character, formula(:parameter || :location || :process || :part));
//process table, from bottom up
for each ( { r }, nrow(dtSum) :: 2,
if ( dtSum:plpp[r] == dtSum:plpp[r-1],
dtSum:tool[r-1] ||= evalinsert(", ^dtSum:tool[ r ]");
dtSum:n Rows[r - 1] += dtSum:n Rows[ r ];
dtSum << delete rows ( r );
);
);
// delete rows with no duplicates
dtSum << deleteRows (dtSum << get rows where (:n Rows == 1) )
<< Move Selected Columns( {:"Date/Time"n}, To First )
<< Move Selected Columns( {:Tool}, To Last );
// rename nRows to count, after subtracting 1
dtSum:Nrows[1::nrow(dtSum)]--;
dtSum:NRows << set name ("Count");
// split out tool column
dtSum << Text to Columns( columns( :Tool ), Delimiters( "," ) );
dtSum << delete columns ({"Tool", "plpp"});
Re: Comparación de celdas con salida condicionalHola,
Sí, la última captura de pantalla que envié es de la salida de su secuencia de comandos como lo que etiquetó como la tabla "Final". Perdóneme por no compartir la tabla específica en cuestión con los datos, ya que tengo que actualizar la información para reflejar los parámetros que no son IP. Intentaré hacer un mejor trabajo de explicación. Como mencioné en la pregunta inicial, la siguiente tabla es un caso de muestra

y la salida debería verse como la siguiente tabla

quiero crear un resumen tabla del número de veces (repeticiones), o recuento, una "herramienta" llega a una "ubicación" dentro del mismo día de "fecha/hora" (no necesariamente una hora específica). Entonces, si una fila se repite según la ubicación, el parámetro y el proceso, debería contarse como 1 repetición. Si esa segunda fila está en la misma herramienta o en una diferente, no importa, siempre y cuando cumpla con los 3 criterios mencionados para 1 recuento repetido. Luego, donde el ejemplo de la tabla de salida dice "Herramienta1, "Herramienta2", etc., sería un registro de qué herramientas estuvieron involucradas en el evento de repetición para esas repeticiones. Entonces, si fue a la herramienta "E", entonces (ubicación, parámetro, proceso) indica que ocurrió otro evento el mismo día y estaba en la herramienta "F", entonces se agregaría una columna a la derecha que refleja que ocurrió el primer evento en E y segundo en F y así sucesivamente. Eventualmente, quiero crear un conjunto de gráficos en jmp a partir de ese resumen donde podría mostrar el recuento de esos eventos repetidos por herramienta, parámetro, ubicación, etc. Además de saber qué herramientas estuvieron involucradas en esos eventos repetidos. Espero que eso explique un poco más mis pensamientos. Y gracias por tu tiempo en esto, te lo agradezco.
Re: Comparación de celdas con salida condicionalTanto la versión de Brady como la mía del código funcionan en la tabla simple que proporcionó. Estoy de acuerdo con Hime en que si su código no funciona, proporcione una tabla más poblada con la que podamos probar.
Re: Comparación de celdas con salida condicionalHola,
Primero, mis disculpas por la larga demora, fui jalado en múltiples direcciones. A continuación, gracias por el script, es casi perfecto y se generó una tabla "Final". Lo que encontré fue que la columna de conteo hace lo que se supone que debe hacer, sin embargo, la "Herramienta" no ancla los datos. Lo que significa que para cada herramienta debería tener un "recuento" total de aciertos/recuentos, por lo que una columna para "recuento" y la columna respectiva para la herramienta junto a ella deberían tener el número de aciertos que también está agrupado por las otras columnas como parámetro, ubicación etc... Lo que obtengo se muestra a continuación, donde las herramientas se dividen en diferentes columnas además de estar distribuidas en filas asociadas con un conteo. Y la columna "herramienta" recién creada repite la misma ID

Re: Comparación de celdas con salida condicional¿Es el ejemplo de salida anterior y un ejemplo de cómo debería verse la salida, o es un ejemplo de cómo la salida es actualmente incorrecta?
¿Sería posible que adjunte la tabla de datos JMP que está utilizando, de modo que haya un ejemplo de algunos datos reales que se pueden usar para las pruebas?Además, si lo anterior no es un ejemplo de cómo deberían verse los datos, ¿podría proporcionar un ejemplo simple de eso?Estoy confundido acerca de lo que realmente estás buscando.
Re: Comparación de celdas con salida condicional¡Gracias esto funcionó!
Re: Comparación de celdas con salida condicionalGracias, esto también puede funcionar con un poco de manipulación de agrupación.