Estoy intentando comprender cómo trabajar con objetos que son contenedores de filas. Incluso esa descripción podría ser incorrecta.
¿Qué significa "FilteredRows" en este contexto?
dt = Current Data Table();
FilteredRows = dt << get rows where( :Date == 12May2025 );
Show( N Rows( FilteredRows ) );
Para retomar el tema, ¿existe algún comando JSL para asignar un objeto a TODAS las filas de una tabla de datos? ¿O eso nunca es necesario?
La opción más parecida que he encontrado que evita la opción 'Seleccionar todas las filas' es:
TodasLasFilas = dt << obtener filas donde(1);
Aunque parezca trampa.
Más importante aún, me gustaría poder aplicar filtros adicionales a un subconjunto de filas.
Esto no funciona, pero transmite la intención:
XFilteredRows = dt << obtener filas donde( :X == 42 );
XYFilteredRows = XFilteredRows << obtener filas donde(:Y ==1.21);
Sí, puedo hacer ambas cosas en una sola línea
XYFilteredRows = dt << obtener filas donde(:X==42 & :Y==1.21);
Sin embargo, planeo usar esto en un bucle "Para cada fila", donde X elimina el 99% de las filas, y posteriormente necesitaré filtrar más parámetros de forma independiente, es decir, las filas que cumplen con XY, las filas que cumplen con XZ y las filas que cumplen con X pero no con Y, etc.
Creo que en tablas grandes será más rápido mantener las X filas filtradas.
En relación con esto, uno de los resultados que estoy intentando obtener es muy similar al resultado de 'Agrupar por', pero con una fórmula personalizada.
JSL de una fórmula de columna:
Media de columna( :Parámetro, :X )
La función 'Agrupar por' es muy práctica para crear fórmulas de columnas a partir de funciones integradas, pero cuando quiero realizar cálculos matemáticos más complejos no sé cómo lograr el mismo efecto de agrupación.
El "contenedor" es una "matriz" (unidimensional).
También puedes crear una matriz manualmente:
misFilas = Matriz ({1,2,3})
misFilas = 1::3
misFilas = [1, 2, 3]
Hay dos maneras de realizar la intersección (y otras operaciones de conjuntos como la unión y la diferencia).
a) utilizando matrices asociativas
aa1 = associative array (myRows1);
aa2 = associative array (myRows2);
aa1 << intersect(aa2);<BR />// aa1 << remove(aa2);
list of rows = aa1 << get keys;
rows= matrix(list of rows);

b) [nuevo en JMP19]: uso de listas
list1 = as list (myRows1);
list2 = as list (myRows2);
<STRIKE>
list of rows = set intersect(list1, list2);
</STRIKE>
list of rows = set intersection(list1, list2);
//list of rows = set difference(list1, list2);
rows= matrix(list of rows);

¿Intersecciones para matrices? Supongo que no.
hogi,
¡Me has salvado otra vez! ¡Gracias!
Una aclaración: utilicé tu sintaxis.
list of rows = set intersect(list1, list2);
Al principio se puso azul, así que pensé que estaba bien, pero me extrañó que no se mostrara en mayúsculas. Luego lo busqué en la guía de scripting y me di cuenta de que era "Establecer intersección". Ahora ya funciona. ¡Saludos!