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 :

Compléter une variable en fonction d'une variable d'une autre table. [DATA]


Sujet :

SAS Base

  1. #1
    Membre à l'essai
    Femme Profil pro
    Programmeuse SAS
    Inscrit en
    Avril 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Programmeuse SAS
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2015
    Messages : 20
    Points : 15
    Points
    15
    Par défaut Compléter une variable en fonction d'une variable d'une autre table.
    Bonjour,
    J'ai doit souvent compléter une variable table1.var1 en fonction d'une autre variable présent dans une autre table (table2.VarA).
    J'ai plusieurs cas : J'aimerai remplir table1.VAR1 tel que table.VAR1=TABLE2.VarA si table1.VarB=table2.VarB. Pour l'instant, j'utilse proc sql avec je fait un left join avec Var2 et VarB comme clé. Mais s'il y as une méthode moins bricolé, je suis fortement intéressée.

    Mon cas qui me pose plus de souci: c'est de remplir table1.Var1=1 si table1.varB est présent dans table2.varB, sinon table1.Var1=0.
    Pour l'instant je me débrouille en créant une sous-table de Table1 que je rempli de 1 puis que je "recolle" au reste. J'aimerai ne pas avoir à créer de table intermediaire. Est ce que vous avez une méthode plus économique en étape et plus propre, s'il vous plait?

    J'espère que ma demande est correctement formulé, sinon n'hésiter pas à me poser une question car c'est un cas que je rencontre souvent et que j'aimerai bien optimiser.

  2. #2
    Membre éprouvé
    Avatar de Haache
    Homme Profil pro
    Doctorant & Ingénieur Statiaticien Economiste
    Inscrit en
    Mars 2014
    Messages
    349
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Canada

    Informations professionnelles :
    Activité : Doctorant & Ingénieur Statiaticien Economiste

    Informations forums :
    Inscription : Mars 2014
    Messages : 349
    Points : 1 009
    Points
    1 009
    Billets dans le blog
    8
    Par défaut
    Bonjour,
    N'est ce pas possible de fusionner les deux tables pour travailler facilement???
    • Faites un tour sur mon siteweb professionnel www.aristideelysee.16mb.com Des codes dans la section "media et code" pouvant vous aider que vous pouvez aussi partager sur les réseaux sociaux.
    • Visiter mon blog en cliquant ici! Des techniques, astuces et macros pour l'analyse quantitative.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Programmeuse SAS
    Inscrit en
    Avril 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Programmeuse SAS
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2015
    Messages : 20
    Points : 15
    Points
    15
    Par défaut
    Non car ce n'est pas le but.
    Je prend un exemple simple:
    Dans la 1er table, je vais avoir 1000 lignes par exemple (une par événement des patient en Picardie) et dans la seconde seulement 100 lignes (une par patient à saint-Gobain). Je voudrais créer une variable dans la 1er table qui me dit var=1 si le patient est présent dans la table2 (si le patient est de saint-gobain), sinon var=0. Pour l'instant, ce que je fait, c'est que je créer une sous table avec proc sql, tel que la table1 ne garde que les événements des patients de saint gobain. J'ajoute la variable var=1 puis je recolle mes données dans la table initial.
    C'est un peu du bricolage. Et je cherche une façon plus propre car c'est vraiment laborieux de faire ainsi quand on doit se référer à plusieurs tables et sur des données lourdes.
    L'idéal ça serait de pouvoir faire une boucle If en se référençant au contenu de deux tables. Et ça, je ne sais pas le faire....Je crois qu'en SQL c'est possible, mais je ne sais pas si ça marche en SQL version SAS, en tout cas mes essaies sont infructueux.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur en SAS/ Statisticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 483
    Points : 1 552
    Points
    1 552
    Par défaut
    Bonjour,
    Si j’ai bien compris, ce code pourrait répondre à la question.
    Il est possible qu'on peut faire mieux à base de une table hash ou proc SQL !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    data Picardie ;
    do i=1 to 100;
    patient=cats('patient_', floor(ranuni(100)*100)) ; output ;
    end ; 
    run ;   
     
    data S_Gobain ;
    do i=1 to 10;
    patient=cats('patient_', floor(ranuni(10)*100)) ; output ;
    end ; 
    run ;   
     
    data S_Gobain ;
    set S_Gobain ;
    _patient=patient ;
    run;	 
     
    proc sort data=Picardie ;  by patient  ; run ;
    proc sort data=S_Gobain ;  by patient ;  run ;
     
    data Picardie_ (drop=_patient) ; 
    merge Picardie(in=Pica) S_Gobain(in=SGob) ; 
    by patient ;	
    Var=0 ;
    if  Pica ; 
    if _patient=patient then Var=1 ;	
    run;
    Cordialement
    Ward

  5. #5
    Membre à l'essai
    Femme Profil pro
    Programmeuse SAS
    Inscrit en
    Avril 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Programmeuse SAS
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2015
    Messages : 20
    Points : 15
    Points
    15
    Par défaut
    Oui c'est bien cela ! Merci.
    Mais que mets tu dans les (in=truc) ? Est-ce une façon de renommer les tables à l'image du "from table1 as tab1" ?
    Et si j'ai plus de 2 variables dans la table S_gobain, je doit les "dropper" ?

  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur en SAS/ Statisticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 483
    Points : 1 552
    Points
    1 552
    Par défaut
    Bonjour,
    Les (in=truc), ce sont deux variables temporaires (Pica et SGob)
    -Si la valeur de «Patient » est présente dans le fichier Picardie, alors Pica =1, sinon Pica =0.
    -Si la valeur de «Patient » est présente dans le fichier S_Gobain, la variable SGob =1, sinon elle est égale à 0.

    -Si tu veux droper des variables (ic var4 et var5) de la table S_Gobain tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    merge Picardie(in=Pica) S_Gobain(in=SGob Drop=var4 var5) ;
    Cordialement
    Ward

  7. #7
    Membre à l'essai
    Femme Profil pro
    Programmeuse SAS
    Inscrit en
    Avril 2015
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Programmeuse SAS
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2015
    Messages : 20
    Points : 15
    Points
    15
    Par défaut
    Merci bien, ça va m'être très utile.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 20/02/2012, 09h01
  2. Réponses: 13
    Dernier message: 07/11/2011, 15h41
  3. Afficher une image en fonction de l'état d'une variable
    Par lcoulon dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 02/05/2011, 19h25
  4. Réponses: 4
    Dernier message: 08/12/2009, 19h35
  5. [Smarty] Attribuer une class en fonction d'un résultat avec une variable
    Par kitten13 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 25/09/2008, 20h03

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