Cree una matriz asociativa a partir de filas seleccionadas únicas y número de filaHola a todos,
Tengo una tabla en la que he seleccionado filas donde el tema es ciencia o matemáticas (usando la función seleccionar dónde). Ahora quiero crear una matriz asociativa que almacene el número de fila de todos los seleccionados con entradas únicas de una columna en particular.
Después de eso, quiero iniciar un ciclo para todas las claves de la matriz asociativa. Lo que creará un subconjunto de las filas de key[i] a Key[i+1] para cada valor.
Por ejemplo:
| Numero de fila | Alumno | Secuencia | Sujeto |
| 1 | A | 1 | Ciencias económicas |
| 2 | A | 2 | Ciencia |
| 3 | A | 4 | Física |
| 4 | A | 5 | Matemáticas |
| 5 | A | 2 | Ciencia |
| 6 | A | 4 | Química |
| 7 | A | 6 | Ciencia |
| 8 | A | 2 | Matemáticas |
| 9 | A | 1 | Social |
*Filas en color azul, he seleccionado usando la función seleccionar donde.
- Quiero crear variables que almacenen Matriz asociativa: ["Ciencia" => {2,5,7}], "Matemáticas" => {4,8}].
- Luego, quiero crear un ciclo para ambas claves que se subdividirán y generarán 3 tablas.
- Tabla 1: De la fila número 2 a la 5
- Tabla 2: De la fila número 5 a la 7
- Tabla 3: De la fila número 4 a la 8
Por favor ayuda, como puedo solucionar.
Gracias 
Re: Crear una matriz asociativa a partir de filas seleccionadas únicas y número de filaPara obtener las tablas de subconjuntos que creo que desea, modifique la última parte del código de Ian para que aparezca como se muestra a continuación. Específicamente, anide el (nuevo) bucle for indexado en j dentro del bucle for indexado en i de Ian.
Salud,
Brady
// Build associative arrays from current key list
subject_aa = associative array();
for (i = 1, i <= nitems(key_list), i++,
found_rows = dt << get rows where(as column(dt, "Subject") == key_list[i]);
subject_aa[key_list[i]] = found_rows;
for(j = 1, j<=nitems(found_rows)-1, j++,
dt << subset(rows(found_Rows[j] :: found_Rows[j+1]));
)
);
show(subject_aa);
Re: Crear una matriz asociativa a partir de filas seleccionadas únicas y número de fila@pmroz ha hecho la mayor parte del trabajo, que se puede agregar a:
NamesDefaultToHere(1);
dt = New Table( "Subjects",
Add Rows( 9 ),
New Column( "Student",
Character( 16 ),
"Nominal",
Set Values( {"A", "A", "A", "A", "A", "A", "A", "A", "A"} )
),
New Column( "Sequence",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [1, 2, 4, 5, 2, 4, 6, 2, 1] )
),
New Column( "Subject",
Character( 16 ),
"Nominal",
Set Values(
{"Economics", "Science", "Physics", "Math", "Science", "Chemistry", "Science", "Math", "Social"}
)
)
);
// Make any row selection (in this case, the 'blue' rows)
dt << selectRows({2, 4, 5, 7, 8 });
// Get key list from the current row selection
subjectVals = Column(dt, "Subject")[dt << getSelectedRows];
key_list = AssociativeArray(subjectVals) << getKeys;
// Build associative arrays from current key list
subject_aa = associative array();
for (i = 1, i <= nitems(key_list), i++,
found_rows = dt << get rows where(as column(dt, "Subject") == key_list[i]);
subject_aa[key_list[i]] = found_rows;
);
show(subject_aa);
Haga clic derecho en las palabras clave de JSL en el editor y haga 'Help Scripting Index' para obtener más información.
Usando su ejemplo, una vez que tiene las matrices asociativas, la especificación de las tres tablas que dice que quiere no estaba clara para mí.
Re: Crear una matriz asociativa a partir de filas seleccionadas únicas y número de fila@pmroz Gracias por responder.
Mi conjunto de datos es muy grande y usar este enfoque puede llevar más tiempo.
Además, mi key_list no está arreglada, depende de la condición de si contiene un texto en particular o no.Re: Crear una matriz asociativa a partir de filas seleccionadas únicas y número de filaEste código debería ayudarlo a comenzar.
dt = New Table( "Subjects", Add Rows( 9 ),
New Column( "Student", Character( 16 ), "Nominal",
Set Values( {"A", "A", "A", "A", "A", "A", "A", "A", "A"} ) ),
New Column( "Sequence", Numeric, "Continuous", Format( "Best", 12 ),
Set Values( [1, 2, 4, 5, 2, 4, 6, 2, 1] ) ),
New Column( "Subject", Character( 16 ), "Nominal",
Set Values( {"Economics", "Science", "Physics", "Math", "Science", "Chemistry",
"Science", "Math", "Social"} ) )
);
key_list = {"Science", "Math"};
subject_aa = associative array();
for (i = 1, i <= nitems(key_list), i++,
found_rows = dt << get rows where(as column(dt, "Subject") == key_list[i]);
subject_aa[key_list[i]] = found_rows;
);
show(subject_aa);