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

SAS Base Discussion :

Sélection d'une table sauf les éléments d'une sélection préalable [DATA]


Sujet :

SAS Base

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 97
    Points : 64
    Points
    64
    Par défaut Sélection d'une table sauf les éléments d'une sélection préalable
    Bonjour,

    J'ai une table A avec une clé sur 5 variables. J'ai créé une table B en sélectionnant certains enregistrements de cette table.

    Je dois maintenant travailler sur une table C qui devrait contenir tous les éléments de A qui n'ont pas déjà été sélectionnés dans B.

    En sql sous Access il y a un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    not in select (... from B)
    mais je n'arrive pas à l'appliquer en proc sql sous SAS

    Et puis je préférerais le faire en étape data (je ne sais pas trop comment gérer le where quand ma clef est sur plusieurs variables). J'imagine que c'est très simple.

  2. #2
    Membre actif
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2002
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 244
    Points : 200
    Points
    200
    Par défaut
    Il y a plusieurs solutions possibles,

    Si tu veux une étape data, tu peux créer autant de tables de sorties que tu as besoin.

    D'après les explications que je peux lire, tu n'as pas besoin de faire de sort

    Tu peux essayer quelque chose comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    data B C;
      set A;
      if (conditionB) then
        output B;
      if (conditionC) then 
        output C;
    run;
    En Proc SQL tu devras utiliser un except
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    create table C as
     select * from A
       except
     select * from B;
    Ceci te donnera ce qui se trouve dans A et qui n'est pas dans B.
    Si tu utilise le sql, jette aussi un oeil sur les modifiers ALL et CORR qui peuvent t'être utiles.

  3. #3
    Rédacteur

    Homme Profil pro
    SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Inscrit en
    Avril 2009
    Messages
    2 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 2 497
    Points : 6 064
    Points
    6 064
    Par défaut
    en fait tu pourrais faire cela de plusieurs façons.

    Dès le départ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    data B C;
    set A;
    if maclef in (maselection) then OUTPUT B;
    else OUTPUT C;
    run;
    Sinon, tu pourrais créer C depuis A et B avec un MERGE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Data C;
    Merge A (in=ta) B(in=tb);
    if ta and not tb;
    by maclef1 maclef2 ;
    run;
    et enfin en SQL, il faudrait fusionner maclef1 et maclef2 pour créer un nouvel identifiant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    proc SQL;
    select a.* 
    from A 
    where CATS(maclef1,maclef2) not in (Select CATS(maclef1,maclef2) from B)
    ;
    quit;
    N'oubliez pas de cliquer sur lorsque votre problème est réglé !

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 97
    Points : 64
    Points
    64
    Par défaut
    Finalement avec la proc sql ça sera très bien Super, merci !

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 17/03/2015, 22h42
  2. Réponses: 5
    Dernier message: 29/12/2010, 08h12
  3. Réponses: 4
    Dernier message: 22/05/2007, 14h42
  4. Réponses: 6
    Dernier message: 01/08/2006, 18h12
  5. Réponses: 2
    Dernier message: 27/12/2005, 20h09

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