Ignorando filas "Excluidas"Hola,
Todavía estoy tratando de superar la "joroba" de JSL, así que perdone la pregunta fundamental.
La cuestión:
- Tengo una tabla de muestra que contiene conjuntos de datos para tres réplicas con sufijo de muestra a1, a2 y a3.
- A veces, una de las réplicas debe establecerse en el estado "Excluido" (el ejemplo siguiente es a2).
- Estoy escribiendo un script por lotes que abrirá una tabla y aplicará cálculos solo a conjuntos que no fueron excluidos.
- Sin embargo, todavía no estoy allí con mi intento (que se muestra a continuación) ya que todavía se están considerando los datos de los tres.
- Creo que puede ser necesaria una declaración "y" para identificar filas no excluidas y luego aplicar la búsqueda de sufijos.
Cualquier aportación, sería muy agradecida.
Gracias neil
states = Current Data Table() << Get Row States();
For( i = 1, i <= N Rows( states ), i++,
rs = As Row State( states[i] );
if (Excluded(rs)==0,
a1 = dt << Get Rows Where(Contains(:Sample,"a1"));
a2 = dt << Get Rows Where(Contains(:Sample,"a2"));
a3 = dt << Get Rows Where(Contains(:Sample,"a3"));
);
)
Tabla de datosRe: Ignorar filas "Excluidas"Parece que está iterando sobre la lista de filas excluidas pero luego haciendo el mismo análisis cada vez, que en realidad no hace referencia a la lista de filas excluidas en ninguna parte.Aquí hay una forma que podría resolver su problema, que obtiene filas coincidentes y filas excluidas, y luego simplemente elimina las filas excluidas de la lista.
Names default to here(1);
//Make a sample dataset with some excluded rows
dt = Open("$Sample_data/iris.jmp");
excluded rows to set = [ 4, 9, 52 ];
dt << Select Rows( excluded rows to set );
dt << Exclude(1);
//Find all matching rows and load in associative array, useful for Remove From function later
species matches = associative array(dt << Get Rows Where(:Species == "setosa"));
//get excluded rows
excluded rows = dt << get excluded rows();
//remove excluded rows from the list of rows matching the species
Remove From (species matches, excluded rows);
//get the matching rows as a list
speciesmatches << get keys;Re: Ignorar filas "Excluidas"eh,
Muchas gracias por el aporte. Todavía soy un poco novato, pero probé el concepto Associative Array. Se muestra el código y funcionará hasta "Obtener claves". Sin embargo, todavía no estoy seguro de cómo obtener la información que necesito de las "coincidencias de especies" para realizar los cálculos necesarios (se enumeran las últimas 6 líneas). Tomé una imagen de una tabla típica que contendría conjuntos excluidos.
Neil
dt = Open( path );
// Find row that were excluded and load into list
Exc_row = dt << Get Excluded Rows;
dt << Select Rows( Exc_row );
dt << Exclude(1);
//Find all matching rows and load in associative array, useful for Remove From function later
species matches = associative array(dt << Get Rows Where(Contains(:Sample,"a1") |Contains(:Sample,"a2") |Contains(:Sample,"a3")));
//get excluded rows
Exc_row = dt << get excluded rows();
//remove excluded rows from the list of rows matching the species
Remove From (species matches, Exc_row);
//get the matching rows as a list
speciesmatches << get keys;
// What needs to be done to get mean of three (or 2 sets in the case of exclusion see table image)
a1 = dt << Get Rows Where(Contains(:Sample,"a1"));
a2 = dt << Get Rows Where(Contains(:Sample,"a2"));
a3 = dt << Get Rows Where(Contains(:Sample,"a3"));<BR />
c1 = Column("Image A pore area (%)");
mean1 = Mean(c1[a1[1]], c1[a2[1]], c1[a3[1]]);
Re: Ignorar filas "Excluidas"Aquí hay una secuencia de comandos actualizada que pasa por cada especie en la tabla de datos de iris y calcula la media de las filas que coinciden con ese criterio.Dicho esto, ahora que entiendo mejor lo que está haciendo, probablemente haría esto de manera diferente y usaría tabular para encontrar esos valores.
Names default to here(1);
//Make a sample dataset with some excluded rows
dt = Open("$Sample_data/iris.jmp");
excluded rows to set = [ 4, 9, 52 ];
dt << Select Rows( excluded rows to set );
dt << Exclude(1);
species list = {"setosa", "versicolor", "virginica"};
//For each species
for(s=1, s<= n items (species list), s++,
//Find all matching rows and load in associative array, useful for Remove From function later
species matches = associative array(dt << Get Rows Where(:Species == species list[s]));
//get excluded rows
excluded rows = dt << get excluded rows();
//remove excluded rows from the list of rows matching the species
Remove From (species matches, excluded rows);
//get the matching rows as a list, use that to find which rows to average
mn = mean( :Sepal length[speciesmatches << get keys] );
//output averages to the log
write(species list[s] || " mean = " || char(mn) || "\!n")
);
Opción usando tabular:
Names default to here(1);
//Make a sample dataset with some excluded rows
dt = Open("$Sample_data/iris.jmp");
excluded rows to set = [ 4, 9, 52 ];
dt << Select Rows( excluded rows to set );
dt << Exclude(1);
//New column with the check for each value
New Column("Species_", Character, "Nominal", Formula(If(Contains(:Species, "se"), "se", Contains(:Species, "ve"), "ve", Contains(:Species, "vi"), "vi")));
//tabulate to find averages - script copied from 'source' of data table after selecting
//'make into data table' from tabulate platform, then inserted dt reference
dtTab = (dt << Tabulate(
Set Format( Mean( :Sepal length( 10, 4 ) ) ),
Add Table(
Column Table( Analysis Columns( :Sepal length ), Statistics( Mean ) ),
Row Table( Grouping Columns( :Species_ ) )
)
)) << Make Into Data Table;
//Now get values from the table
dtTab:"Mean(Sepal length)"n[dtTab << Get Rows Where(:Species_ == "se")];Re: Ignorar filas "Excluidas"¡Muchas gracias!
Le daré una oportunidad a esto y veré cómo va.
La intención original era simplemente tomar la porosidad de una fila para cada conjunto (a1, a2 y a3) y obtener la media. La porosidad es la misma para cada réplica, pero no pudo encontrar una manera más fácil de extraer solo 3 puntos distintos y promedio.
Otra vez, gracias por el aporte.
Neil
Re: Ignorar filas "Excluidas"Definitivamente, eche un vistazo tanto a la plataforma tabulada como a la función de resumen JSL, creo que ambas pueden obtener su respuesta con bastante rapidez.