IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Débutez Discussion :

Extraire les enregistrements de la table qui contiennent deux valeurs données : le champ contient des virgules


Sujet :

Débutez

  1. #1
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 23
    Points : 27
    Points
    27
    Par défaut Extraire les enregistrements de la table qui contiennent deux valeurs données : le champ contient des virgules
    Bonjour,

    Dans une table SAS, j'ai un champ texte pouvant être null, contenir une chaine sur 4 caractères, ou plusieurs chaines séparées par des virgules:

    Champ
    -------
    AAAA
    AAAA,BBBB
    AAAA,BBBB,CCCC,EEEE
    AAAA,CCCC,EEEE,DDDD,BBBB
    ZZZZ,VVVV,CCCC,BBBB,DDDD

    Comment faire pour extraire les enregistrements de la table qui contiennent 'BBBB' et 'CCCC' ?

    Merci pour votre aide.

  2. #2
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut Extraire les enregistrements de la table qui contiennent deux valeurs données : le champ contient des virgules
    utilise la fonction in

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where champ in ('BBBB', 'CCCC');

  3. #3
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 23
    Points : 27
    Points
    27
    Par défaut
    Merci pour la réponse, mais je vais préciser ma question:
    Je dois exclure de ma table les enregistrements qui contiennent la chaine 'BBBB' ou la chaine 'EEEE' ou les 2.
    Dans l'extrait ci-dessous, le deuxième, troisième et quatrième enregistrements doivent être supprimés.

    La solution qui consiste à utiliser "NOT IN" comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE Champ NOT IN ('BBBB','EEEE')
    ne fonctionne pas.
    Et la solution avec LIKE non plus ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE Champ LIKE ANY ('%BBBB%', '%EEEE%')
    SAS me dit qu'il ne reconnait pas le "ANY" ?

    Champ
    -------
    AAAA
    AAAA,BBBB
    AAAA,BBBB,CCCC,EEEE
    AAAA,CCCC,EEEE,DDDD
    ZZZZ,VVVV,CCCC,RRRR,DDDD
    ...

    Merci.
    PS: pour la longueur du champ 'LENGTH' en sql fonctionne très bien.

  4. #4
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    okay, après relecture, il me semble comprendre que la variable CHAMP prends la valeur AAAA,BBBB mais pas BBBB. C'est bien ca (tu as une seule variable)? dans ces cas la la fonction index semble plus appropriée.

    le not in fonctionne bien c'est juste qu'il ne reconnait pas la valeur BBBB, puisqu'elle n'existe pas

  5. #5
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 23
    Points : 27
    Points
    27
    Par défaut
    Merci, je vais tester la fonction index et je te dirais.

    Mais pour préciser, j'ai une seule variable "Champ" qui prend différentes valeurs:"AAAA" ou "AAAA,BBBB" ou "AAAA,BBBB,CCCC,EEEE" ...etc.
    Autrement dit, la variable Champ contient soit rien, soit une chaine de 4 lettres, soit plusieures chaines de 4 lettres séparées par des virgules.

    Ce que je souhaite faire, c'est exclure les champs qui contiennent au moins l'une des valeurs suivantes: 'BBBB' ou 'EEEE'.
    Si je l'applique à l'extrait ci-dessous, seuls le premier et le dernier enregistrement restent car ils ne contiennent ni 'BBBB' ni 'EEEE'.

    Champ
    -------
    AAAA
    AAAA,BBBB
    AAAA,BBBB,CCCC,EEEE
    AAAA,CCCC,EEEE,DDDD
    ZZZZ,VVVV,CCCC,RRRR,DDDD

  6. #6
    Nouveau membre du Club
    Inscrit en
    Janvier 2010
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 23
    Points : 27
    Points
    27
    Par défaut
    Merci Manoutz, la fonction indexc fonctionne effectivement très bien.
    Voici la condition qui permet d'exclure les champs contenant au moins l'une des 2 chaines 'BBBB' ou 'EEEE' :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE=(indexc(champ,'BBBB','EEEE')=0);
    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/06/2014, 20h18
  2. Réponses: 2
    Dernier message: 23/12/2010, 18h35
  3. Réponses: 10
    Dernier message: 18/06/2009, 13h27
  4. Réponses: 4
    Dernier message: 03/04/2008, 14h26
  5. Réponses: 2
    Dernier message: 07/12/2007, 15h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo