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 :

jointure sous SAS proc sql


Sujet :

SAS Base

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 167
    Points : 65
    Points
    65
    Par défaut jointure sous SAS proc sql
    Bonjour,
    Comment on peut faire une jointure sur le numéro de ligne de la table d’entrée A avec l’identifiant de la ligne en table B sans mettre un compteur préalablement sur la table A. Je veux éviter une étape data sur la table d’entrée juste pour mettre ce compteur.



    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
    29
    30
    31
    32
    33
    data A;
     
     do ii=1 to 20;
     
     a = ii*10; output;
     
     end;
     
    run;
     
     
     
    data B;
     
      nunrow = 2; output;
     
      nunrow = 9; output;
     
    run;
     
     
     
    proc sql noprint;
     
      create table val_err
     
      as select a.*,b.numrow
     
      from A,B as b
     
      where a._n_ = b.numrow;
     
    quit;

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 249
    Points : 290
    Points
    290
    Par défaut
    Bonjour,

    Je ne comprends pas très bien le problème : ne s'agit-il pas simplement d'extraire les observations d'une table en fonction de leur numéro fourni dans une autre ?
    Une jointure sans variable disponible pour la clé de jointure : je ne vois pas de solution...
    ATTENTION AUX FAUTES DE FRAPPE DANS LE CODE PROPOSE
    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
    data A ;
       do ii=1 to 20 ;
          a = ii*10 ; 
          output ;
       end;
    run;
    data B ;
       input numrow ; 
       cards ;
    2
    9
       ;
    run;
    proc sql noprint ;
       create table val_err as
          select *
          from A,B 
          where A.ii = B.numrow
          ;
    quit ;
    Bon courage !

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 167
    Points : 65
    Points
    65
    Par défaut
    Non j'essaye de faire une jointure entre les deux table mais je veux eviter de faire une étape data pour la table A. mais la proc sql ne marche pas. je vois pas pourquoi.

    Avez vous une idée?

  4. #4
    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
    Ca ne fonctionne pas parce que _N_ n'est pas une vraie variable, c'est juste une info qui existe dans le vecteur de travail au cours de l'étape Data. C'est pour ça qu'on ne peut l'utiliser ni dans un Where, ni dans une procédure.
    Tu peux essayer ça : la fonction MONOTONIC() génère un compteur incrémental, et en faisant une requête imbriquée on l'ajoute aux données avant la jointure. Ca garde l'idée du SQL, mais pas sûr que ça aille plus vite que de faire une étape Data pour ajouter une colonne à ta table A.
    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
    DATA A ;
       do ii=1 TO 20 ;
          a = ii*10 ; 
          output ;
       end;
    run;
    DATA B ;
       input numrow ; 
       cards ;
    2
    9
       ;
    run;
    proc sql noprint ;
       CREATE TABLE val_err AS
          SELECT *
          FROM (SELECT *, MONOTONIC() AS id FROM A) AS A,B 
          WHERE A.id = B.numrow
          ;
    quit ;
    Olivier

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

Discussions similaires

  1. Jointure sous SAS
    Par draculla dans le forum SAS Base
    Réponses: 2
    Dernier message: 26/06/2015, 18h35
  2. [SQL] Fonctionnement WHERE dans PROC SQL sous SAS
    Par essai_sas dans le forum SAS Base
    Réponses: 1
    Dernier message: 05/11/2011, 17h38
  3. pb de jointure de 2 requete sql sous vb
    Par hebh dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 28/10/2010, 23h09
  4. proc IML (langage matriciel sous sas)
    Par Abdeltif_esa dans le forum SAS IML
    Réponses: 0
    Dernier message: 20/11/2008, 23h57
  5. Itération entre table SAS et proc sql
    Par marti dans le forum Administration et Installation
    Réponses: 16
    Dernier message: 21/05/2008, 11h43

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