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

Macro Discussion :

Macro variable dans PROC SQL : fusion de SELECT


Sujet :

Macro

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2009
    Messages : 84
    Points : 50
    Points
    50
    Par défaut Macro variable dans PROC SQL : fusion de SELECT
    Bonjour,

    j'essai d'utiliser une macro variable au sein d'une proc SQL mais j'ai toujours une erreur.

    1/ je déclare mes variables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    /*création de macro variable, */
    DATA _null_;
    SET liste;
    call symput('num'||left(trim(_n_)),num);
    call symput('tok'||left(trim(_n_)),tok);
    call symput('nb_num',_n_);
    run;
    j'utilise ensuite une macro pour créer une vingtaine de tables faisant référence à des tables mensuelles

    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
    %macro test4;
    %do i=25 %TO &nb_num.;
    PROC SQL;
    CREATE TABLE work.PER&&num&i AS SELECT TABL.compte,
    TABL.opcint,
    TABL2.mois,
    TABL2.poste_analy,
    TABL2.montant * -1
    FROM TOTAL AS TABL
    LEFT JOIN QUALIAC.QUALIAC_MENSCLI_20&&tok&i AS TABL2 ON (TABL.compte = TABL2.cpt)
    where TABL2.poste_analy in ('67500030A');
    QUIT;
    %end;
    %mend;
    %test4;
    tout ceci fonctionne très bien.

    mais je veux terminer en fusionnant toutes ces tables en une.
    pour éviter d'écrire un code du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    PROC SQL;
    CREATE TABLE TOTAL_PER AS 
    SELECT * FROM PER25 UNION 
    SELECT * FROM PER26 UNION
    SELECT * FROM PER27 UNION 
    .......;
    QUIT;
    j'ai tenté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    %macro fusion;
    proc sql; 
    CREATE TABLE PER_TOTAL AS
    SELECT * FROM PER25  
    %do i=26 %TO &nb_num.;
    UNION SELECT * FROM PER&&num&i;
    %end;
    quit;
    %mend fusion;
    %fusion;
    mais j'obtiens ce message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    NOTE: Line generated by the invoked macro "FUSION".
    45          UNION SELECT * FROM PER&&num&i;
                _____
                180
    ERROR 180-322: Statement is not valid or it is used out of proper order.
    pouvez-vous m'aider?

  2. #2
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    essaye union all au lieu de union

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2009
    Messages : 84
    Points : 50
    Points
    50
    Par défaut
    Ca ne marche pas non plus avec UNION ALL.

    meme message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    NOTE: Line generated by the invoked macro "FUSION".
    45          UNION ALL SELECT * FROM PER&&num&i;
                _____
                180
    ERROR 180-322: Statement is not valid or it is used out of proper order.

  4. #4
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    vaoila comment fonctionne le union all. Essaye sur du code statique avant de passser sur du dynamique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Proc SQL;
    Create Table Cost as
    Select *
    From
    ThisYearsCost(obs=max)
    Union All
    Select *
    From
    LastYearsCost(obs=max)
    ;
    Quit;

  5. #5
    Invité
    Invité(e)
    Par défaut
    par de point virgule avant UNION ALL


    Citation Envoyé par docteurdorian Voir le message
    Ca ne marche pas non plus avec UNION ALL.

    meme message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    NOTE: Line generated by the invoked macro "FUSION".
    45          UNION ALL SELECT * FROM PER&&num&i;
                _____
                180
    ERROR 180-322: Statement is not valid or it is used out of proper order.

  6. #6
    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
    bonjour,

    c'est un problème de syntaxe supprime le ";" suis se trouve à la fin de la ligne UNION SELECT * FROM PER&&num&i; et mets le après le %end;;
    Consultez les FAQs et les anciens postes avant de poser vos questions. Merci

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2009
    Messages : 84
    Points : 50
    Points
    50
    Par défaut
    merci beaucoup à tous.

    merci Bahraoui, en effet c'était juste un problème de placement du point-virgule.

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

Discussions similaires

  1. Proc format, value et macro variable de proc sql
    Par Didierek dans le forum ODS et reporting
    Réponses: 1
    Dernier message: 21/01/2014, 07h28
  2. Macro variable et proc sql
    Par gwirionez dans le forum SAS Base
    Réponses: 2
    Dernier message: 17/07/2012, 16h09
  3. [Macro] Libellé macro-variable avec proc sql
    Par auredura dans le forum Macro
    Réponses: 2
    Dernier message: 03/09/2008, 12h46
  4. Variables dans un .sql exécuté par sqlplus
    Par ekke dans le forum Oracle
    Réponses: 10
    Dernier message: 12/04/2006, 17h03
  5. une variable dans du SQL ??
    Par Black Pearl dans le forum Langage SQL
    Réponses: 3
    Dernier message: 18/06/2005, 12h55

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