No estoy seguro si esto es posible ...Tengo una tabla de datos que tiene una columna que es 1 o 2 (se llama canal). En otra columna hay una designación de "prueba". Es numérico como 10 o 20 o 30.
Lo que me gustaría es crear otra columna que concate todas las 'pruebas' para el canal 1 y luego para el canal 2. Entonces, cada línea de datos tendrá una columna que tiene la concat de la prueba basada en el canal. Por tanto, puede parecer 10 | 30 | 80 para el canal 1, pero 20 | 40 | 30 para el canal 2.
La tabla de datos podría tener miles de líneas de datos de resultados de diferentes pruebas. Estoy interesado en ver qué canal usa qué prueba por máquina. Dado que diferentes máquinas pueden tener diferentes pruebas en diferentes canales.
Es posible que también necesite agregar otro calificador. Para que la 'prueba' se concatene no solo por canal sino también por máquina (que se indica con un número de serie).
Esto estaría en el script para incluirlo en una consulta posterior al script.
¡Se agradece cualquier sugerencia!
ScriptingRe: No estoy seguro si esto es posible ...Hacer lo que quieras no será muy difícil. Sin embargo, su descripción es un poco confusa. ¿Le sería posible proporcionar un pequeño ejemplo de la tabla de datos y lo que quiere como esta nueva columna que está proponiendo?Re: No estoy seguro si esto es posible ...Seguro que se adjunta una tabla de ejemplo. Solo aparece 1 máquina, pero más de 1 podría aparecer en la tabla. Además, con el tiempo, el número de prueba por canal podría cambiar.
Puedo tabular los datos para obtener qué canal tiene qué número de prueba por fecha, pero hay alguna forma de indicarlo en una columna para cada línea de datos. El testinitiationdatelocal podría usarse como fecha corta para obtener el día.
Re: No estoy seguro si esto es posible ...Seguro que se adjunta una tabla de ejemplo. Solo aparece 1 máquina, pero más de 1 podría aparecer en la tabla. Además, con el tiempo, el número de prueba por canal podría cambiar.
Puedo tabular los datos para obtener qué canal tiene qué número de prueba por fecha, pero hay alguna forma de indicarlo en una columna para cada línea de datos. El testinitiationdatelocal podría usarse como fecha corta para obtener la 'fecha'
Re: No estoy seguro si esto es posible ...Aquí hay un script que calcula las pruebas en una sola columna. Simplemente haga que su tabla con los datos del número de prueba sea la tabla de datos activa, haciendo clic en ella y luego ejecute este script.
names default to here(1);
// Set up a handle to point to the example data table
dt=current data table();
// Find the testnumbers for each machine/channel combination
dtSumm = dt << summary(
Group( :Machine, :Channel,:testnumber),
N,
Link to original data table(0)
);
// Create a new table to accumulate the testnumbers into a single value
dtFinal = New Table("Concat Test Number",
New Column("Machine", character),
New Column("Channel"),
New Column("Tests", character)
);
For(i=1,i<=N Rows(dtSumm), i++,
If(i==1,
dtFinal << add Rows(1);
dtFinal:Machine[N Rows(dtFinal)] = dtSumm:Machine[i];
dtFinal:Channel[N Rows(dtFinal)] = dtSumm:Channel[i];
dtFinal:Tests[N Rows(dtFinal)] = char( dtSumm:testnumber[i])
,
dtSumm:Machine[i] != dtSumm:Machine[i-1] |
dtSumm:Channel[i] != dtSumm:Channel[i-1]
,
dtFinal << add Rows(1);
dtFinal:Machine[N Rows(dtFinal)] = dtSumm:Machine[i];
dtFinal:Channel[N Rows(dtFinal)] = dtSumm:Channel[i];
dtFinal:Tests[N Rows(dtFinal)] = char( dtSumm:testnumber[i])
,
dtFinal:Tests[N Rows(dtFinal)] = dtFinal:Tests[N Rows(dtFinal)] || "/" || char( dtSumm:testnumber[i])
)
);
// Merge the new column back to the origianl table
dt = dt << Update(
With( dtFinal ),
Match Columns( :Machine = :Machine, :channel = :Channel )
);
close( dtSumm, nosave );
close( dtFinal, nosave );
Re: No estoy seguro si esto es posible ...¡Guauu! ¡asombroso! ¡Gracias!
Re: No estoy seguro si esto es posible ...Entonces, ¿cómo incluiría un elemento de fecha? En el examplev2 hay una columna con fecha. 1 El punto de datos para el canal 2 usa la Prueba 40, por lo que debería aparecer para los datos de esa fecha (7/4). No debería aparecer para las otras líneas para otras fechas para el canal 2 ya que esas fechas no se usó la prueba 40.
Re: No estoy seguro si esto es posible ...Todo lo que creo que debe ser
names default to here(1);
// Set up a handle to point to the example data table
dt=current data table();
// Find the testnumbers for each machine/channel combination
dtSumm = dt << summary(
Group( :Date, :Machine, :Channel,:testnumber),
N,
Link to original data table(0)
);
// Create a new table to accumulate the testnumbers into a single value
dtFinal = New Table("Concat Test Number",
New Column("Date"),
New Column("Machine", character),
New Column("Channel"),
New Column("Tests", character)
);
For(i=1,i<=N Rows(dtSumm), i++,
If(i==1,
dtFinal << add Rows(1);
dtFinal:Date[N Rows(dtFinal)] = dtSumm:Date[i];
dtFinal:Machine[N Rows(dtFinal)] = dtSumm:Machine[i];
dtFinal:Channel[N Rows(dtFinal)] = dtSumm:Channel[i];
dtFinal:Tests[N Rows(dtFinal)] = char( dtSumm:testnumber[i])
,
dtSumm:Machine[i] != dtSumm:Machine[i-1] |
dtSumm:Channel[i] != dtSumm:Channel[i-1]
,
dtFinal << add Rows(1);
dtFinal:Date[N Rows(dtFinal)] = dtSumm:Date[i];
dtFinal:Machine[N Rows(dtFinal)] = dtSumm:Machine[i];
dtFinal:Channel[N Rows(dtFinal)] = dtSumm:Channel[i];
dtFinal:Tests[N Rows(dtFinal)] = char( dtSumm:testnumber[i])
,
dtFinal:Tests[N Rows(dtFinal)] = dtFinal:Tests[N Rows(dtFinal)] || "/" || char( dtSumm:testnumber[i])
)
);
// Merge the new column back to the origianl table
dt = dt << Update(
With( dtFinal ),
Match Columns( :Date = :Date, :Machine = :Machine, :channel = :Channel )
);
close( dtSumm, nosave );
close( dtFinal, nosave );
hecho, es agregar la Fecha como una columna de clasificación adicional, como "Máquina" y "Canal".
Re: No estoy seguro si esto es posible ...Veo.
Cuando lo apliqué, el script funcionó. Excepto que noté en los datos que faltaban algunas líneas. No puedo entender qué está pasando con estas líneas y por qué no funcionará.
Re: No estoy seguro si esto es posible ...No pude agregar la fecha [i] vs. Fecha [i-1]. Agregué eso a la línea 29, y el script parece estar funcionando ... por favor, compruébalo
names default to here(1);
// Set up a handle to point to the example data table
dt=current data table();
// Find the testnumbers for each machine/channel combination
dtSumm = dt << summary(
Group( :Date, :Machine, :Channel,:testnumber),
N,
Link to original data table(0)
);
// Create a new table to accumulate the testnumbers into a single value
dtFinal = New Table("Concat Test Number",
New Column("Date"),
New Column("Machine", character),
New Column("Channel"),
New Column("Tests", character)
);
For(i=1,i<=N Rows(dtSumm), i++,
If(i==1,
dtFinal << add Rows(1);
dtFinal:Date[N Rows(dtFinal)] = dtSumm:Date[i];
dtFinal:Machine[N Rows(dtFinal)] = dtSumm:Machine[i];
dtFinal:Channel[N Rows(dtFinal)] = dtSumm:Channel[i];
dtFinal:Tests[N Rows(dtFinal)] = char( dtSumm:testnumber[i])
,
dtSumm:Date[i] != dtSumm:Date[i-1] | dtSumm:Machine[i] != dtSumm:Machine[i-1] |
dtSumm:Channel[i] != dtSumm:Channel[i-1]
,
dtFinal << add Rows(1);
dtFinal:Date[N Rows(dtFinal)] = dtSumm:Date[i];
dtFinal:Machine[N Rows(dtFinal)] = dtSumm:Machine[i];
dtFinal:Channel[N Rows(dtFinal)] = dtSumm:Channel[i];
dtFinal:Tests[N Rows(dtFinal)] = char( dtSumm:testnumber[i])
,
dtFinal:Tests[N Rows(dtFinal)] = dtFinal:Tests[N Rows(dtFinal)] || "/" || char( dtSumm:testnumber[i])
)
);
// Merge the new column back to the origianl table
dt = dt << Update(
With( dtFinal ),
Match Columns( :Date = :Date, :Machine = :Machine, :channel = :Channel )
);
close( dtSumm, nosave );
close( dtFinal, nosave );Re: No estoy seguro si esto es posible ...- Debe leer la Guía de secuencias de comandos en la Biblioteca de documentación de JMP
- Sí, la sintaxis es diferente, que es lo que aprenderá leyendo la documentación. El JSL que sugieres y que modifiqué a continuación funcionará para una fórmula de columna. Si esto estuviera en código JSL abierto, las referencias a sampletype y sampleid requerirían un subíndice que apunte a la fila en cuestión.
If( :sampletype == "Control" & contains(:sampleid,"Neg"), Col Max( :results))
Re: No estoy seguro si esto es posible ...Lo tenía bien para el contenido ... pero cometí errores más porque era una fórmula más complicada ... tonto de mí
Re: No estoy seguro si esto es posible ...¡Leeré más la guía!Re: No estoy seguro si esto es posible ...¡Gracias!
¡Funciona genial!
En una declaración If se puede tener algo
If (:sampletype =="Conrol" & :sampleid contains "Neg", Col Max(:results), .)