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 :

Inclure des conditions dans la création de liens entre deux tables


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 Inclure des conditions dans la création de liens entre deux tables
    J'ai une petite table de référence avec des intitulés pour une clé consitutée de deux variables. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    data sit;
    	input v1 v2 libel $15.;
    	cards;
    	75 1 Paris1erarr
    	75 2 Paris2ndarr
    	75 3 Paris3earr
    	94 . VdM
    	93 . SSD
    	99 99 Indéterminé
    	;
    run;
    J'ai une autre table bien plus fournie avec une combinaison des deux variables ci-dessus pour différents individus. Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    data sitac;
    	input v1 v2 nom $15.;
    	cards;
    	75 1 Pierre
    	75 2 Paul
    	75 3 Jacques
    	94 1 Marie
    	94 2 Laeticia
    	94 3 Christophe
    	92 1 Philippe
    	92 2 Amélie
    	92 3 Arnaud
    	;
    run;
    Mon objectif est le suivant : je voudrais pouvoir créer une nouvelle table avec tous les enregistrements de sitac en affichant, pour chaque enregistrement, le libel correspondant à une combinaison v1, v2 lue dans la table sit...

    MAIS :

    Mon problème est que ce n'est pas un lien direct d'équivalence puisqu'il y a beaucoup plus de possibilités dans la table sitac et que je dois faire une correspondance logique lors du lien selon des règles précises :

    - Si la combinaison v1/v2 de l'enregistrement de la table sitac est présente dans la table sit, alors effectuer le lien normalement. Ex. pour les 3 premières lignes de sitac, obtenir de façon logique les résultats suivants :

    75 1 Pierre Paris1erarr
    75 2 Paul Paris2ndarr
    75 3 Jacques Paris3earr

    Si seul le v1 (mais pas le v2) de la combinaison v1/v2 de l'enregistrement est présente dans la table sit, alors effectuer le lien uniquement sur le v1. Ex. pour les lignes 4 à 6 de sitac, obtenir les résultats suivants :

    94 1 Marie VdM
    94 2 Laeticia VdM
    94 3 Christophe VdM

    - Si v1 n'est pas présent dans la table sit (quel que soit la valeur de v2), alors lier avec le 99/99 de la table sit. Ex. pour les lignes 7 à 9 de sitac, obtenir les résultats suivants :

    92 1 Philippe Indéterminé
    92 2 Amélie Indéterminé
    92 3 Arnaud Indéterminé

    J'ai abordé cette question en pensant pouvoir créer la table finale que je souhaite avec un proc sql mais je me suis aperçu que je ne savais pas mettre de condition lors de la création du lien ("where if" ???). Est-ce possible ? Ou avec un merge (que j'utilise très peu...) ?

    (Mon problème se complique après dans un second temps mais déjà si j'arrive à régler ce premier soucis je saurais peut-être également coder la seconde partie...)

    Merci d'avance

  2. #2
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Bonjour.
    Ça ressemble beaucoup à un besoin à traiter en SQL. En tout cas beaucoup plus qu'avec un MERGE.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    PROC SQL ;
      CREATE TABLE work.jointure AS
        SELECT d.*,
    	       COALESCE(l.libel,"Indéterminé") AS libel
    	FROM work.sitac AS d
    	  LEFT JOIN
    	     work.sit   AS l
    	  ON d.v1 = l.v1
    	  AND (d.v2 = l.v2
    	    OR l.v2 IS MISSING)
      ;
    QUIT ;
    Tu noteras qu'en fait, le 99/99 n'est pas nécessaire dans ce cas, la fonction COALESCE et le LEFT JOIN se chargent de gérer les cas de non correspondance entre les tables.
    Bon courage.
    Olivier

  3. #3
    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
    Impeccable, merci Olivier.

    Je suis en train de regarder un peu en détail comment fonctionne le COALESCE pour pouvoir l'adapter à mon problème initial - simplifié dans le fuseau que j'ai posté ici.

    (Je mets le fuseau comme résolu mais au besoin je reviens ici si je bloque encore pour la suite ! )

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

Discussions similaires

  1. Suppression et création de lien entre deux tables
    Par patmar83 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 12/05/2015, 16h48
  2. [AC-2007] Assurer le lien entre deux tables liées lors de la création d'un enregistrement
    Par dudul08 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 04/04/2011, 22h19
  3. [MySQL] Lien entre deux tables
    Par ept35 dans le forum PHP & Base de données
    Réponses: 27
    Dernier message: 14/12/2005, 19h42
  4. [MySQL] Lien entre deux tables
    Par ept35 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 28/11/2005, 13h56
  5. [VB.NET] ComboBox lien entre deux tables
    Par VDB1 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 15/07/2004, 12h15

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