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 :

Traduction étape DATA en SQL


Sujet :

SAS Base

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Statisticien
    Inscrit en
    Août 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Statisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2012
    Messages : 6
    Points : 7
    Points
    7
    Par défaut Traduction étape DATA en SQL
    Bonjour,

    je cherche à réaliser avec une procédure SQL l'équivalent de l'étape data suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    data test;
    set table1;
    set table2;
    run;
    Merci

  2. #2
    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
    ce papier SAS t'expliquera les différents usages de SET.

    http://www2.sas.com/proceedings/sugi23/Begtutor/p50.pdf

    C'est un UPDATE sur les colonnes identiques (t2 remplace t1). Mais si table1 avait des colonnes qui n'étaient pas dans table2, elles apparaîtraient dans la table finale.

    Voit donc la différence entre :

    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
    data a;
    input a b c;
    cards;
    1 2 3 
    ;
    run;
    data b;
    input a b c;
    cards;
    4 5 6 
    ;
    run;
     
    data c;
    set a;
    set b;
    run;
    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
    data a;
    input a b c;
    cards;
    1 2 3 
    ;
    run;
    data b;
    input d e f;
    cards;
    4 5 6 
    ;
    run;
     
    data c;
    set a;
    set b;
    run;

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur Statisticien
    Inscrit en
    Janvier 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Statisticien
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2013
    Messages : 28
    Points : 59
    Points
    59
    Par défaut
    Bonjour miasseu,

    Je ne connaissait pas un tel usage du SET, merci datametric pour le lien vers cette documentation.

    Si j'ai bien compris le PDF, alors la traduction en SQL serait de lier les deux tables par numéro de lignes commune :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    proc sql noprint;
    	create table d(drop=_N_) as
    	select *
    	from (select*, monotonic() as _N_ from a) a
    	inner join (select *, monotonic() as _N_ from b) b
    	on (a._N_ = b._N_);
    quit;

  4. #4
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    La jointure SQL implique d'avoir une variable en commun entre les deux tables.
    Tu peux aussi faire un produit cartésien (attention au ressources de la machine)...
    Dans ton cas tu crées la variable en commun, voir la table en sortie.
    Tu peux nous fournir la structure de tes tables?

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur Statisticien
    Inscrit en
    Janvier 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Statisticien
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2013
    Messages : 28
    Points : 59
    Points
    59
    Par défaut
    Oups, petite correction

    D'après le doc cité par datametric, on considère que
    Combine Multiple SAS Data Sets
    SET dsname_1 ;
    SET dsname_2 ;
    In this example, the SAS Supervisor maintains two
    pointers, one for each data set. An observation
    would be read from data set dsname_1 followed by
    an observation from data set dsname_2, and so on
    until an end of file condition occurs in one of the data
    sets. The combination of the two data sets would
    form a single observation in the new data set.
    Where the same variables exist in both data sets, the
    values of the second data set would overlay the
    values of the first data set.
    Ce que je traduit par les instructions suivantes :
    Joindre les observations par numéro de ligne commune, et remplacer les variables communes par celles de la dernière table appelée.

    Pour être rigoureux, cela donnerait donc plutôt ceci :

    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
     
     
    DATA a;
    input a b c;
    cards;
    1 2 3 
    ;
    run;
    DATA b;
    input b e f;
    cards;
    4 5 6 
    7 8 9 
    ;
    run;
     
    DATA c;
    SET a;
    SET b;
    run;
    proc sql noprint;
    	CREATE VIEW va as SELECT*, monotonic() AS _N_ FROM a;
    	CREATE VIEW vb as SELECT*, monotonic() AS _N_ FROM b;
    	CREATE TABLE d(DROP=_N_) AS
    	SELECT *
    	FROM vb
    	INNER JOIN va
    	ON (va._N_ = vb._N_);
    quit;
    (faire attention à appeler au niveau du FROM la table 2 avant la table 1, car dans la logique SQL les variables de la première table appelée sont conservées au détriment de la seconde table)

Discussions similaires

  1. Traduction étape data en proc SQL
    Par julbisounours dans le forum SAS Base
    Réponses: 8
    Dernier message: 15/04/2012, 00h21
  2. [IML] Sortir d'une étape data
    Par stefsas dans le forum SAS IML
    Réponses: 3
    Dernier message: 22/05/2008, 11h47
  3. mise a jour data de sql server vers mysql
    Par kimo0147 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 30/06/2006, 11h25
  4. [DataSource] Data-source SQL Server
    Par Eric Schmitz dans le forum Struts 1
    Réponses: 10
    Dernier message: 28/06/2006, 08h40
  5. Load data en SQL
    Par fab101 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 05/06/2005, 15h10

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