Équivalent de get rows où pour plusieurs tableauxBonjour,
Cela semble être une question assez basique, mais j'utilise probablement les mauvais termes de recherche car je n'ai pas trouvé de bonne réponse.
J'ai un script où initialement je faisais juste une liste de chaînes (chemins de fichiers) et je pouvais les utiliser dans un ordre séquentiel sans problème. Au fur et à mesure que la portée s'élargit, je dois maintenant effectuer un filtrage basé sur des critères dans deux autres listes de même longueur qui ont été créées en même temps. Mon cerveau fonctionne toujours dans des tables de données, et dans un format de table de données (ou SQL), ce serait une chose facile à faire. La création d'une table de données cachée pourrait être une option viable, mais j'aimerais mieux comprendre comment travailler avec différentes structures de données et changer mon code pour utiliser un autre dt semble désordonné.
Cela ressemble à une application pour les tableaux associatifs, mais j'ai du mal à créer correctement le tableau et le guide de script et l'index de script n'ont pas été éclairants. Quelqu'un peut-il m'orienter dans la bonne direction ou suggérer une structure de données qui aurait plus de sens pour ce que j'essaie maintenant de faire ? Ou une table cachée serait-elle en fait la meilleure option ?
Notez également que dans cet exemple, j'ai trois listes individuelles. Dans mon application actuelle, chaque liste est contenue dans sa propre liste où List_A[1] correspond à List_B[1], etc., mais je parcoure les listes parentes.
Merci!
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?
Automatisation et scriptRe : Équivalent de get rows où pour plusieurs tableauxLes tables de données JMP sont faciles à interroger et elles sont assez rapides (selon votre requête), donc j'utiliserais très probablement simplement privé ou table de données invisible.Si vous voulez vraiment utiliser un tableau associatif, je pense que vous devrez créer un grand nombre de clés uniques telles que "13_M" pour indiquer l'âge == 13 et le sexe == "M".
Re : Équivalent de get rows où pour plusieurs tableauxLa fonction loc() pour rechercher des éléments dans une liste ou une matrice. Utilisez les tableaux associatifs pour croiser plusieurs listes d'index. Re : Un moyen rapide de comparer deux listes (éléments peu communs) ?
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 : Équivalent de get rows où pour plusieurs tableauxMerci Craige, Jarmo ! Il est donc tout à fait possible de faire avec des tableaux, mais cela prend quelques étapes, il semble donc que JSL soit plus conçu pour utiliser une table invisible/privée dans un cas comme celui-ci (d'où la raison pour laquelle je ne trouvais pas de réponses évidentes).