Interroger la table de données jmp avec JSLSalut,
J'ai besoin d'obtenir une liste de noms distincts pour les 12 et 13 ans dans Big Class.jmp
Ma méthode actuelle semble être très inefficace. (Sélectionnez où, sous-ensemble...)
Quelle est la façon de faire cela avec Query();
Merci.
Mon script est :
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
AgeList = {13, 15};
dt << Select where( Contains( AgeList, :Age ) > 0 );
SubsetDt = dt << Subset( Selected Rows, Columns( "name" ) );
Summarize( SubsetDt, DistinctNames = By( :(1) ) );
Close( SubsetDt, nosave );
Show( DistinctNames );Re : Interroger la table de données jmp avec JSLMerci beaucoup, c'est exactement ce dont j'ai besoin.
Re : Interroger la table de données jmp avec JSLMerci Jim, @txnelson .
@tom_abramov , il existe plusieurs façons de le faire. Puisque vous avez utilisé le mot requête, j'ai pensé que vous pourriez avoir une sélection de type SQL plus complexe, j'ai donc utilisé la fonction JMP query().Vous trouverez ci-dessous une méthode simple ne nécessitant pas de syntaxe SQL. Un tableau associatif est une liste à clés et les clés doivent être uniques.:name[idx] produit une liste de toutes les lignes avec 12, 13 et 15 ans. Le tableau associatif n'a que des noms uniques avec une valeur associée de 1. Les noms uniques sont les clés du tableau associatif.
Names Default To Here( 1 );
dt = Open( "$Sample_Data/Big Class.jmp", invisible );
AgeList = {12, 13, 15};
idx = dt << get rows where(Contains(Agelist,:age));
uniq_names = Associative Array( :name[idx] ) <<GET keys=""></GET>
Re : Interroger la table de données jmp avec JSLLe fait que la requête crée une table de données n'est vraiment pas un inhibiteur.Le script ci-dessous est une simple modification du script précédent, avec en plus le déplacement du contenu de la colonne Nom de la table de données finale, dans une liste, puis la suppression de la table de données.En ce qui concerne quiconque exécute le script, aucune table de données n'est jamais affichée.
Names Default To Here( 1 );
dt = Open( "$Sample_Data/Big Class.jmp", invisible );
AgeList = {12, 13, 15};
_xx = Words( Char( AgeList ), "{}" )[1]; //convert to a comma delimited text and remove braces {}
ndtQ = Query( Table( dt, "t1" ),invisible, Eval Insert( "SELECT DISTINCT name From t1 WHERE age IN (^_xx^)" ) );
namesList = ndtQ:Name << get values;
Close( dt, NoSave );
close(ndtQ, nosave);Re : Interroger la table de données jmp avec JSLC'est très utile, merci.
J'utilise JMP 15.
Une autre question : puis-je enregistrer le résultat de la requête directement dans la liste au lieu de créer une table de données ?
C'est parce que je n'ai pas besoin du tableau, j'ai besoin d'une liste de noms distincts.
Sinon, c'est toujours mieux que Select Where -> Subset.
Merci.
Re : Interroger la table de données jmp avec JSL@tom_abramov ,
Vous n'avez pas mentionné la version de JMP que vous utilisez.Je ne me souviens pas si la fonction JMP query() était disponible pour la première fois dans JMP 12 ou 13. Vous pouvez utiliser des instructions SQL standard sur les tables JMP.Comme Big Class n'a qu'un seul nom non unique, Robert, pour un 12 et 15 ans, j'ai modifié votre demande pour les 12, 13 et 15 ans.
Names Default To Here( 1 );
dt = Open( "$Sample_Data/Big Class.jmp", invisible );
AgeList = {12, 13, 15};
_xx = Words( Char( AgeList ), "{}" )[1]; //convert to a comma delimited text and remove braces {}
ndtQ = Query( Table( dt, "t1" ), Eval Insert( "SELECT DISTINCT name From t1 WHERE age IN (^_xx^)" ) );
ndtQ << set name( "Unique BC Names" );
Wait( 3 );
Close( dt, NoSave );
Voici le résultat :
