Créer un tableau associatif à partir de lignes sélectionnées uniques et d'un numéro de ligneSalut tout le monde,
J'ai un tableau dans lequel j'ai sélectionné des lignes où le sujet est la science ou les mathématiques (en utilisant la fonction select where). Maintenant, je veux créer un tableau associatif qui stocke le numéro de ligne de tous les éléments sélectionnés avec des entrées uniques d'une colonne particulière.
Après cela, je veux démarrer une boucle pour toutes les clés du tableau associatif. Ce qui sous-ensemble les lignes de key[i] à Key[i+1] pour chaque valeur.
Par exemple:
| Row_Number | Étudiant | Séquence | Sujet |
| 1 | UN | 1 | Économie |
| 2 | UN | 2 | Science |
| 3 | UN | 4 | La physique |
| 4 | UN | 5 | Mathématiques |
| 5 | UN | 2 | Science |
| 6 | UN | 4 | Chimie |
| 7 | UN | 6 | Science |
| 8 | UN | 2 | Mathématiques |
| 9 | UN | 1 | Sociale |
*Lignes de couleur bleue, j'ai sélectionné en utilisant la fonction select where.
- Je veux créer des variables qui stockent Associative Array : ["Science" => {2,5,7}], "Math" => {4,8}].
- Ensuite, je veux créer une boucle pour les deux clés qui créera un sous-ensemble et générera 3 tables.
- Tableau 1 : Du numéro de ligne 2 à 5
- Tableau 2 : Du numéro de ligne 5 à 7
- Tableau 3 : Du numéro de ligne 4 à 8
S'il vous plaît aider, comment je peux résoudre.
Merci 
Re : Créer un tableau associatif à partir de lignes sélectionnées uniques et d'un numéro de lignePour obtenir les tables de sous-ensemble que je crois que vous voulez, modifiez la dernière partie du code de Ian afin qu'il apparaisse comme ci-dessous. Plus précisément, imbriquez la (nouvelle) boucle for indexée j dans la boucle for indexée i de Ian.
Acclamations,
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 : Créer un tableau associatif à partir de lignes sélectionnées uniques et d'un numéro de ligne@pmroz a fait l'essentiel du travail, auquel on peut ajouter :
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);
Faites un clic droit sur les mots-clés JSL dans l'éditeur et faites 'Help Scripting Index' pour obtenir plus d'informations.
En utilisant votre exemple, une fois que vous avez les tableaux associatifs, la spécification des trois tables que vous dites vouloir n'était pas claire pour moi.
Re : Créer un tableau associatif à partir de lignes sélectionnées uniques et d'un numéro de ligne@pmroz Merci d'avoir répondu.
Mon ensemble de données est très volumineux et l'utilisation de cette approche peut prendre plus de temps.
De plus, ma key_list n'est pas fixe, cela dépend de la condition qu'elle contienne ou non un texte particulier.Re : Créer un tableau associatif à partir de lignes sélectionnées uniques et d'un numéro de ligneCe code devrait vous aider à démarrer.
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);