Problema del filtro de datos mediante el uso de bucleHola a todos
Ahora tengo un problema con la cara para filtrar los datos. Tengo 2 problemas aquí:
Problema 1 : ¿Cómo puedo convertir @ en carácter? Porque cuando ejecuto el script, sale error.
Grupo(
: Nombre ("I_P2A .6 / .045 Avg @ ET"),
: Nombre ("I_N2A .3 / .045 Avg @ ET"),
: Nombre ("I_P2G_G_0.6 / 0.06 Avg @ ET"),
: Nombre ("I_P2HG_0.6 / 0.06 Avg @ ET")
)
Freq ("Ninguno"),
Peso ("Ninguno")
Problema 2: filtro de datos mediante el uso de bucle.
¿Es posible que si quiero agrupar los 4 parámetros a continuación en un nombre (declarar nombre)?
Porque en mi conjunto de datos, el nombre de la columna es como: I_P2A .6 / .045 Avg @ ET
I_N2A .3 / .045 Avg @ ET
I_P2G_G_0.6 / 0.06 Avg @ ET
I_P2HG_0.6 / 0.06 Avg @ ET
Entonces, mi propósito es cómo puedo hacer 4 columnas en un solo nombre, porque cuando escribo el script, solo necesito escribir los nombres de las variables que declaro (4 parámetros), luego se automatizará para saber que estos 4 parámetros están dentro este nombre de variable. ¿Es posible agrupar en un solo nombre?
dt = open("---------");
family_device = Data Table("--------") << Summary (Group(:Family Device), Freq("None"), Weight("None"));
parameter = Data Table("---------") << Summary(
Group(
:Name( "I_P2A .6/.045 Avg @ ET" ),
:Name( "I_N2A .3/.045 Avg @ ET" ),
:Name( "I_P2G_G_0.6/0.06 @ ET" ),
:Name( "I_P2HG_0.6/0.06 @ ET" )
),
Freq( "None" ),
Weight( "None" )
);
For(ifamily_device = 1, ifamily_device <= NRows(family_devices), ifamily_device++,
thisFamily_Device = family_devices : Family Device[ifamily_device];
For(iparameter = 1, iparameter <= Nrows(parameters), iparameter++,
thisParameter = parameters: (column name in dataset-how i convert all these 4 parameters into one group name?)[iparameter];
Group(
:Name( "I_P2A .6/.045 Avg @ ET" ),
:Name( "I_N2A .3/.045 Avg @ ET" ),
:Name( "I_P2G_G_0.6/0.06 Avg @ ET" ),
:Name( "I_P2HG_0.6/0.06 Avg @ ET" )
)
);
);Gracias.
Re: Problema de filtro de datos utilizando para bucle
Re: Problema de filtro de datos utilizando para bucleCreo que uso la imagen tal vez mejor.
Digamos ahora que tengo S_GX, y utiliza los parámetros I_P2A GSVT .6 / .045 Avg y I_N2A GSVT .3 / .045 Avg. Pero ahora necesito resumir de mi conjunto de datos, lo que significa que aquí necesito resumir S_GX usará dos parámetros que son I _P2A GSVT .6 / .045 Avg y I_N2A GSVT .3 / .045 Avg.etc ...
Gracias
Re: Problema de filtro de datos utilizando para bucleLo siento por no explicar claramente lo que quiero hacer.
En realidad, lo que quiero hacer es hacer el resumen según el tipo de producto, por ejemplo: Ahora tengo el producto a, b, c, d, e, y cada producto tiene su propia lista de parámetros, por ejemplo: I_P2A. 6 / .045 Avg @ ET, I_N2A .3 / .045 Avg @ ET, I_P2G_G_0.6 / 0.06 Avg @ ET, I_P2HG_0.6 / 0.06 Avg @ ET etc. Así que ahora quiero hacer un filtro o tal vez usar celdas seleccionadas para hacer el resumen del producto a usar I_P2A .6 / .045 Avg @ ET, el producto b usar I_N2A .3 / .045 Avg @ ET y etc. y cada uno de los productos tiene más de un parámetro. Porque después de eso necesito basarme en el resultado para hacer los gráficos. entonces mis datos son bastante, por lo que necesito subcontratar los datos antes de hacer los gráficos de variabilidad. Y ahora mi condición es que no sé cómo hacer el script para hacer el resumen que explico. Y tampoco puedo codificar duro.
Entonces, ¿puedes darme algo de la sugerencia?
GraciasRe: Problema de filtro de datos utilizando para bucleParece que no entiendo lo que quieres. Tal vez alguien tiene mejor percepción que yo.
Re: Problema de filtro de datos utilizando para bucleUna pregunta de mi parte:
De acuerdo con su código, ¿por qué necesitamos establecer el nombre de la columna (cambiar el nombre de la columna)? Porque en mi caso, el nombre de la columna como: (I_P2A .6 / .045 Avg @ ET, I_N2A .3 / .045 Avg @ ET, I_P2G_G_0.6 / 0.06 Avg @ ET, I_P2HG_0.6 / 0.06 Avg @ ET: todavía lo necesito como nombre de mi columna), mi problema es cómo agrupar 4 columnas diferentes para que se conviertan en un solo nombre para que yo pueda declarar fácilmente en el siguiente código.
Porque al fin, necesito hacer el resumen basado en el dispositivo familiar y los parámetros (nombre de 4 columnas diferentes)
Gracias.Re: Problema de filtro de datos utilizando para bucleLos errores en su código son síntomas de ejecutar demasiados pasos en la JSL, por lo que se confunde sobre qué problemas están causando qué problemas. JSL proporciona algunas cosas excelentes para ayudar a recorrer el código para ver cuáles son los problemas reales. La primera de ellas es la capacidad de resaltar cualquier sección del código y ejecutar solo el código resaltado. Y la capacidad de simplemente desplazarse sobre una variable y ver cuál es el último valor para ella. Un entorno más formal es utilizar el Depurador JSL, que le permitirá avanzar línea por línea a través del código para validar la lógica y los cálculos.
A continuación se muestra una evaluación del código que proporcionó. Lo que verá es que los errores en el código provienen de no ser lo suficientemente cuidadosos con los nombres de las variables.
// This line of code has nothing to do with the script, so I have commented it out
//dt = open("---------");
// For testing purposes,a data table needs to be opened and setup with the columns used in the script
// Open the Big Class data table
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
// Now modify the data table to make it look like the script wants
// Delete the "name" column
dt << delete columns( "name" );
// The "sex" column will become the "Family Device" column
dt:sex << set name( "Family Device" );
// The "age", "weight", and "height" columns will be changed to three of the other columns required
dt:age << set name( "I_P2A .6/.045 Avg @ ET" );
dt:height << set name( "I_N2A .3/.045 Avg @ ET" );
dt:weight << set name( "I_P2G_G_0.6/0.06 @ ET" );
// Create the final column as a simple formula column
dt << New Column( "I_P2HG_0.6/0.06 @ ET", formula( Random Normal() ) );
// Now just remove the formula to make the values static(just a simple step to make the table clea)n
dt:Name( "I_P2HG_0.6/0.06 @ ET" ) << delete property( "Formula" );
// The sample data table is complete
// Now run the script
// The creation of the first summary data table....only the data table's name was substituted
// The summary works without error
family_device = Data Table( "Big Class" ) << Summary( Group( :Family Device ), Freq( "None" ), Weight( "None" ) );
// The creation of the second summary data table....once again only the data table name was changed
// There is no issue with the "@" being in the column names
// The summary works without error
parameter = Data Table( "Big Class" ) << Summary(
Group( :Name( "I_P2A .6/.045 Avg @ ET" ), :Name( "I_N2A .3/.045 Avg @ ET" ), :Name( "I_P2G_G_0.6/0.06 @ ET" ), :Name( "I_P2HG_0.6/0.06 @ ET" ) ),
Freq( "None" ),
Weight( "None" )
);
// There are issues here. The first one is that in the "NRows()" function, a variable by the
// name of "family_devices" is used, and there is not a variable by that name. The name of
// the variable is "family_device". When this code is run, that error is clearly listed in the Log
//For(ifamily_device = 1, ifamily_device <= NRows(family_devices), ifamily_device++,
For( ifamily_device = 1, ifamily_device <= N Rows( family_device ), ifamily_device++,
// Once again the reference to "family_device" is made
//thisFamily_Device = family_devices : Family Device[ifamily_device];
thisFamily_Device = family_device:Family Device[ifamily_device];
// For a third time, an invalid variable name has been specified. In this case, "Parameters"
// instead of "parameter"
//For(iparameter = 1, iparameter <= Nrows(parameters), iparameter++,
For( iparameter = 1, iparameter <= N Rows( parameter ), iparameter++,
// I am a bit confused on this one. First off, "parameters" instead of "parameter" is used, however
// the grouping question could be interpreted a couple of ways, so what I have done is to just
// concatenate the columns together
/*thisParameter = parameters: (column name in dataset-how i convert all these 4 parameters into one group name?)[iparameter];
Group(
:Name( "I_P2A .6/.045 Avg @ ET" ),
:Name( "I_N2A .3/.045 Avg @ ET" ),
:Name( "I_P2G_G_0.6/0.06 Avg @ ET" ),
:Name( "I_P2HG_0.6/0.06 Avg @ ET" )
)*/
thisParameter = Char( parameter:Name( "I_P2A .6/.045 Avg @ ET" )[iparameter] ) || Char( parameter:Name( "I_N2A .3/.045 Avg @ ET" )[iparameter] ) ||
Char( parameter:Name( "I_P2G_G_0.6/0.06 @ ET" )[iparameter] ) || Char( parameter:Name( "I_P2HG_0.6/0.06 @ ET" )[iparameter] );
show(thisFamily_Device, thisParameter );
);
);