Equivalente de obtener filas donde para múltiples matricesHola,
Esta parece una pregunta bastante básica, pero es probable que esté usando los términos de búsqueda incorrectos porque no he encontrado una buena respuesta.
Tengo una secuencia de comandos en la que inicialmente solo estaba haciendo una lista de cadenas (rutas de archivos) y podía usarlas en orden secuencial sin problemas. A medida que se amplió el alcance, ahora necesito filtrar según los criterios en otras dos listas de la misma longitud que se crearon al mismo tiempo. Mi cerebro todavía funciona en tablas de datos, y en un formato de tabla de datos (o SQL) esto sería algo fácil de hacer. Crear una tabla de datos oculta podría ser una opción viable, pero me gustaría entender mejor cómo trabajar con diferentes estructuras de datos y cambiar mi código para usar otro dt parece complicado.
Esto parece una aplicación para matrices asociativas, pero estoy luchando para crear correctamente la matriz y la guía de secuencias de comandos y el índice de secuencias de comandos no han sido esclarecedores. ¿Alguien puede indicarme la dirección correcta o sugerir una estructura de datos que tenga más sentido para lo que estoy tratando de hacer ahora? ¿O una mesa oculta sería la mejor opción?
También tenga en cuenta que en este ejemplo tengo tres listas individuales. En mi aplicación actual, cada lista está contenida en su propia lista donde List_A[1] corresponde a List_B[1], etc., pero estoy iterando a través de las listas principales.
¡Gracias!
Names Default To Here( 1 );
//example data is in dt, my data isn't
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
//this is more or less the structure of the data that I have
sex_list = dt:sex << get values;
height_list = dt:height << get values;
weight_list = dt:weight << get values;
//this is what I would do if I had the data in a dt
output = dt:weight[dt << get rows where(and(:age == 13, :sex == "M"))];
show(output);
//how to do this with the data in a structure with no dt? what structure would be appropriate?
Automatización y secuencias de comandosRe: Equivalente de obtener filas donde para matrices múltiplesLas tablas de datos JMP son fáciles de consultar y son bastante rápidas (dependiendo de su consulta), por lo que lo más probable es que solo use privado o tabla de datos invisible.Si realmente quiere usar una matriz asociativa, creo que tendría que crear muchas claves únicas como "13_M" para indicar la edad == 13 y el sexo == "M".
Re: Equivalente de obtener filas donde para matrices múltiplesLa función loc() para encontrar elementos en una lista o matriz. Utilice las matrices asociativas para cruzar varias listas de índices. Re: ¿Forma rápida de comparar dos listas (elementos poco comunes)?
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
name_list = dt:name << get values;// a list
sex_list = dt:sex << get values;// a list
age_list = dt:age << get values;// a matrix
weight_list = dt:weight << get values;
age_rows = Loc( 13 <= age_list <= 14 );
sex_rows = Loc( sex_list, "M" );
// intersection of those https://community.jmp.com/t5/Discussions/Quick-way-to-compare-two-lists-and-identify-the-uncommon/m-p/5811
intersect = Associative Array( age_rows );// uses two associative arrays
intersect << intersect( Associative Array( sex_rows ) ); // perform the intersection
intersect = intersect << getkeys; // get the answers
For Each( {key}, intersect, Write( Eval Insert( "\!n^name_list[key]^ \!t^age_list[key]^ \!t^sex_list[key]^ \!t^weight_list[key]^" ) ) );
/*
JOHN 13 M 98
JOE 13 M 105
MICHAEL 13 M 95
DAVID 13 M 79
FREDERICK 14 M 93
ALFRED 14 M 99
HENRY 14 M 119
LEWIS 14 M 92
EDWARD 14 M 112
CHRIS 14 M 99
JEFFREY 14 M 113
*/Re: Equivalente de obtener filas donde para matrices múltiples¡Gracias Craige, Jarmo! Por lo tanto, definitivamente es posible hacerlo con matrices, pero requiere algunos pasos, por lo que parece que JSL está más diseñado para usar una tabla invisible/privada en un caso como este (por eso no encontré respuestas obvias).