Comment sélectionner des lignes en fonction de plusieurs critères ?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Salut,
J'écris un script pour sous-ensembler une table de données. En suivant l'exemple de codage des guides de script, je peux sélectionner selon un critère :
pour chaque ligne(Selected(Rowstate())=(name=="KATIE"));
Comment puis-je généraliser cela pour sélectionner à la fois KATIE et LOUISE ?
Cela ne fonctionne pas:
pour chaque ligne(Selected(Rowstate())=(name=="KATIE","LOUISE"));
Alors, quelle est la syntaxe pour cela ?
Salutations
Poul
Re : Comment sélectionner des lignes en fonction de plusieurs critères ?Merci,
J'avais l'habitude de regrouper chaque critère dans un tableau individuel, puis de les combiner tous.
Bonne année !Re : Comment sélectionner des lignes en fonction de plusieurs critères ?Est-ce ce que vous essayez d'accomplir, trouver toutes les correspondances trouvées dans la liste appelée "name_list", puis les afficher dans une table de données sous-ensemble ?
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
name_list = {"Clay", "Alice", "AMY"};
For( i = 1, i <= N Items( name_list ), i++,
i_name = Uppercase( name_list[i] );
dt << select where( :name == i_name, current selection( "extend" ) );
);
dtSub = dt << subset( selected rows( 1 ), selected columns( 0 ) );Re : Comment sélectionner des lignes en fonction de plusieurs critères ?Salut madame,
merci pour votre scénario.
Je me demande s'il existe un moyen de gérer dynamiquement la liste de noms, tout en étant capable de sous-définir le
dt = Ouvrir ( "$SAMPLE_DATA/Grande Classe.jmp" ) ;
name_list={"argile","Alice","AMY", ...};
pour(i=1,i<=nitems(name_list),i++,
je_nom=name_list[i];
dt<
);
dt<
Re : Comment sélectionner des lignes en fonction de plusieurs critères ?Cette syntaxe pourrait être un peu plus lisible.Vous pouvez utiliser la barre verticale pour OU et l’esperluette pour ET :
dt = ouvrir ( "$sample_data\Big Class.jmp" ) ;
dt << sélectionner où (( contient ( : nom , "UNE CRAVATE" ) | contient ( : nom , "OBER" ))
& contient ( : sexe , "F" )) ;
Re : Comment sélectionner des lignes en fonction de plusieurs critères ?Presque là. Le And() doit contenir les deux arguments ; pour que And() soit vrai, ses deux arguments doivent être vrais.
Cela devrait fonctionner :
Pour chaque ligne ( Choisi ( État de la ligne () ) = Et ( Ou ( contient ( : nom , "UNE CRAVATE" ) , contient ( : nom , "OBER" )) , contient ( : sexe , "F" ))) ;
Re : Comment sélectionner des lignes en fonction de plusieurs critères ?Bonjour, ces réponses ont été vraiment utiles. Maintenant, si je veux ajouter une condition de valeur dans une autre colonne, disons que je voulais sélectionner name="KATIE" et "ROBERT", (ou encore mieux, contenant "ATIE"), ET sex="F". Ensuite, je devrais combiner la condition Or- avec une condition et.
dt = Ouvrir ( "$SAMPLE_DATA/Grande Classe.jmp" ) ;
Pour chaque ligne ( Choisi ( État de la ligne () ) = Ou ( contient ( : nom , "UNE CRAVATE" ) , contient ( : nom , "OBER" )) Et (contient(:sexe, "F" ))) ;
J'ai déjà quelque chose comme ça, mais je n'ai pas réussi.
Salutations
Poul
(PS Évidemment, j'ai beaucoup utilisé Base SAS. Maintenant, j'essaie d'implémenter les sélections sur les tables de cette façon. Merci pour l'aide.)
Re : Comment sélectionner des lignes en fonction de plusieurs critères ?S'il y a beaucoup de chaînes à faire correspondre, il serait tentant d'utiliser une liste au lieu de construire une longue clause OR(). Cependant, Contain() ne peut pas rechercher de sous-chaînes dans une liste (de chaînes). Une boucle sur la liste est alors nécessaire. Voici un exemple :
dt = Ouvrir ( "$SAMPLE_DATA/Grande Classe.jmp" ) ;
liste de nom = { "UNE CRAVATE" , "ISE" , "CLY" , "WWW" } ;
n = N articles ( liste de nom ) ;
Pour chaque ligne (
Pour ( je = 1 , je <= n , je ++,
Si ( ( s_flag = Contient ( : nom [] , liste de nom [ je ] )) > 0 ,
Casser ()
)
) ;
Choisi ( État de la ligne () ) = s_flag ;
) ;
Re : Comment sélectionner des lignes en fonction de plusieurs critères ?Même principe :
dt = Ouvrir ( "$SAMPLE_DATA/Grande Classe.jmp" ) ;
Pour chaque ligne ( Choisi ( État de la ligne () ) = Ou ( contient ( : nom , "UNE CRAVATE" ) , contient ( : nom , "ISE" )) ) ;
// Ou bien
dt << Sélectionnez où ( Ou ( contient ( : nom , "UNE CRAVATE" ) , contient ( : nom , "ISE" )) ) ;
Re : Comment sélectionner des lignes en fonction de plusieurs critères ?Mais que se passe-t-il si je souhaite utiliser davantage « Contient » pour faire correspondre les chaînes uniquement sur une partie des chaînes ? Comme « ATIE » et « ISE » ? Cordialement Poul
Re : Comment sélectionner des lignes en fonction de plusieurs critères ?Utilisez Ou() :
dt = Ouvrir ( "$SAMPLE_DATA/Grande Classe.jmp" ) ;
Pour chaque ligne ( Choisi ( État de la ligne () ) = Ou ( nom == "KATIE" , nom == "LOUIS" ) ) ;
// Ou bien
dt << Sélectionnez où ( Ou ( nom == "KATIE" , nom == "LOUIS" ) ) ;