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 :

Automatiser un merge


Sujet :

Macro

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 422
    Points : 99
    Points
    99
    Par défaut Automatiser un merge
    bonjour je commence à m'interesser à SAS MACRO et je voudrais faire la macro qui m'automatise la fusion de tables en sas.

    donc voilà le code que j'ai écrit (nb: il ressemble à rien mais c'est juste pour comprendre la logique)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    %let condition_1="if a and b";
    %let condition_2="if a or b";
    %let condition_3="if a";
    %let condition_4="if b";
    %macro fusion(tab1,tab2,tab3,var,condition);
    data &tab3;
    merge &tab1 &tab2;
    by &var;
    %do i=1 %to 4
    if &condition=&condition_&i then &condition;
    run;
    %mend fusion;
    Le code ne fonctionne pas en fait je ne sais absolument pas comment utiliser les macros variables que j'ai parametré
    D'autres solutions sont également les bienvenues
    Merci d'avance

  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
    Quel est le soucis, l'utilisation du language macro ou du merge?

    essaye d'abord sans macro et regarde si ca marche. Apres ca devrait couler de source.

    Pour infor tu as juste compile ta macro.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    %macro fusion(tab1=,tab2=,tab3=,var=,condition=);
    DATA &tab3;
    merge &tab1 &tab2;
    BY &var;
    %do i=1 %TO 4
    IF &condition=&condition_&i then &condition;
    run;
    %mend fusion;
    Il te faut maintenant l'executer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %fusion(tab1=parametre,tab2=parametre,tab3=parametre,var=parametre,condition=parametre);
    (code non teste, il est possible qu'une petite coquille s'y soit glissee, huitre)

  3. #3
    Membre actif
    Femme Profil pro
    Analyste en Intelligence d'Affaires (BI)
    Inscrit en
    Avril 2008
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste en Intelligence d'Affaires (BI)
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 245
    Points : 290
    Points
    290
    Par défaut
    Au préalable n'oublie pas de trier tes tables en entrée par &VAR.

    Comme dit précédemment teste un code qui fonctionne sans macro d'abord.

  4. #4
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2011
    Messages : 1 624
    Points : 3 402
    Points
    3 402
    Par défaut
    il te manque un ";" et un peu de détail sur ce que tu veux faire au juste ?
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 422
    Points : 99
    Points
    99
    Par défaut
    bonjours,

    j'ai testé sans macro
    voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    %let condition_4="if b";
    DATA base.test;
    merge base.fichepat(in=a) base.clients_fin(in=b);
    BY CODEPORTEFEUILLE;
    &condition_4;
    run;
    donc ça ne fonctionne pas et j'ai un message d'erreur qui pointe sur le code suivant:

    cordialement,
    Huître

  6. #6
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Février 2011
    Messages : 1 624
    Points : 3 402
    Points
    3 402
    Par défaut
    essaies avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    %let condition_4=if b;
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

  7. #7
    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
    voire meme (plus de macro variables):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DATA base.test;
    merge base.fichepat(IN=a) base.clients_fin(IN=b);
    BY CODEPORTEFEUILLE;
    if b;
    run;

  8. #8
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 422
    Points : 99
    Points
    99
    Par défaut
    à partir des informations que vous m'avez fournies
    j'ai écrit la macro suivante:

    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
    /*déclaration des critères de fusions*/
    %let a=if a;
    %let b=if b;
    %let a+b=if a and b;
    %let a*b=if a or b;
    /*fusion de tables*/
    %macro fusion(tab1,tab2,tab3,var,condition);
    %tri(&tab1,&var);
    %tri(&tab2,&var);
    data &tab3;
    merge &tab1(in=a) &tab2(in=b);
    by &var;
    &condition;
    run;
    %mend fusion;
    lorsque j'appelle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %fusion(base.clients_fin,base.fichepat,base.test2,ID_PERSONNE,a*b);
    je n'ai aucun message d'erreur et c'est plutot ça qui m'inquiête
    pouvez vous me dire si la déclaration des variables est correct

    merci d'avance

  9. #9
    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 : 46
    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 Huître.
    Déjà, les noms de tes 2 dernières macro-variables sont incorrects : ne sont autorisés dans les noms que des lettres, des chiffres sauf en 1er et le underscore _.
    A l'exécution de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    %let a=IF a;
    %let b=IF b;
    %let a+b=IF a AND b;
    %let a*b=IF a OR b;
    SAS répond
    %let a+b=IF a AND b;
    NOTE: A missing equal sign has been inserted after the variable name A.
    %let a*b=IF a OR b;
    NOTE: A missing equal sign has been inserted after the variable name A.
    Je ne vois pas bien l'intérêt de ces 4 macro-variables, sauf à titre d'exercice. Dans ce cas il faudrait que tu modifies dans ton étape Data
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DATA &tab3;
    merge &tab1(IN=a) &tab2(IN=b);
    BY &var;
    &&&condition;
    run;
    car vue la manière dont tu codes, trois & sont nécessaires puisque CONDITION ne contient pas du code SAS mais le nom d'une autre macro-variable.

    Sinon sans rien changer de ton code de macro-programme, tu pourrais bien plus simplement appeler le macro-programme avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %fusion(base.clients_fin,base.fichepat,base.test2,ID_PERSONNE,IF a OR b);
    et ça devrait fonctionner. (pas testé)

    Bon courage dans ton apprentissage du macro-langage.
    Olivier
    Bon courage.
    Olivier

  10. #10
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 422
    Points : 99
    Points
    99
    Par défaut
    oui justement c'est à titre d'exercice je suis entrain d'apprendre sas macro
    d'ailleurs je voudrais savoir s'il existe une banque d'exercice ou des tutos sur sas macro.
    cordialement huître

  11. #11
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    422
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 422
    Points : 99
    Points
    99
    Par défaut
    salut

    j'ai testé solution suivante
    malheureusement j'ai un message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %fusion(base.clients_fin,base.fichepat,base.test2,ID_PERSONNE,IF a OR b);
    j'ai oublié est ce que quelqu'un peut m'expliquer l'interet de & et plus précisement des 3 &.
    Merci d'avance

  12. #12
    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
    tu peux poster ta log et le code exécuter?
    Consultez les FAQs et les anciens postes avant de poser vos questions. Merci

Discussions similaires

  1. Shell - Merge de fichiers
    Par tesla dans le forum Linux
    Réponses: 4
    Dernier message: 29/06/2004, 02h10
  2. Réponses: 2
    Dernier message: 01/06/2004, 16h12
  3. Automatisation et/ou installer pour une bd sql
    Par ZePitou dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 22/02/2004, 12h54
  4. [MAPI][info] automatisation des taches de messagerie
    Par peppena dans le forum Windows
    Réponses: 6
    Dernier message: 22/01/2004, 16h06
  5. Automatiser la mise à jour de la bD SQL SERVER from Access
    Par Nadaa dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/11/2003, 15h23

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