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] Comment concaténer des variables stockées dans une seule macro-variable


Sujet :

Macro

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 45
    Points : 31
    Points
    31
    Par défaut [Macro] Comment concaténer des variables stockées dans une seule macro-variable
    Bonjour,

    Actuellement en stage de fin d'étude en data management, je dois créer un macro programme permettant de concaténer des variables(enfin ya d'autres trucs, mais c'est cet endroit qui me bloque). J'avais donc créer des programmes tels que celui ci-dessous. Mais le problème c'est que selon le nombre de variable (non constant) à concaténer, il faut créer d'autres macro programmes (qui possèdent un nombre d'appels de variables différent). Hors mes supérieurs veulent un seul macro programme (ce qui est compréhensible)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    %macro essai4 ( var, var1, var2, var3);
    data Essai;
    SET Batch2.Essai;
    a4 = catx('/',&var,&var1,&var2,&var3) ;
    RUN;
    %mend;
    J'ai donc penser à stocker les variables dans une seule macro variable. Mais du coup je ne vois pas comment concaténé les variables contenues dans une seule macro-variable.

    Merci d'avance

    wizou44

  2. #2
    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
    Un seul paramètre au macro-programme, qui contiendrait la liste des variables séparées par des espaces, me semble une bonne solution.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    %macro essai4 (variables);
    %LET variables = %SYSFUNC(COMPBL(&variables)) ; /* supprime les blancs inutiles */
    %LET variables = %SYSFUNC(TRANSLATE(&variables,%STR(,),%STR( ))) ; /* remplace les blancs par des virgules */
    DATA Essai;
    SET sashelp.class;
    a4 = catx('/', &variables) ;
    RUN;
    %mend;
    %essai4(name age sex)
    Olivier
    Bon courage.
    Olivier

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 45
    Points : 31
    Points
    31
    Par défaut
    Merci, pour ta réponse clair et rapide.

    J'avais imaginer plein de trucs mais aucun ne marchait, mais bon je suis encore en stage pour trois mois, j'ai un peu de temps pour acquérir encore un peu d'expérience

    wizou44

  4. #4
    Responsable SAS


    Inscrit en
    Septembre 2006
    Messages
    3 176
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 176
    Points : 16 219
    Points
    16 219
    Par défaut
    Bonjour,
    Une autre solution du même style est l'utilisation de PARMBUFF :
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    %MACRO test/PARMBUFF;
    ....
    %MEND;
    Avec une exécution :
    Les balises code
    FAQ SAS
    Rubrique SAS

    Si vous souhaitez contribuer à la rubrique SAS, contactez-moi ou tout autre membre de l'équipe BI par MP.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 45
    Points : 31
    Points
    31
    Par défaut
    bonjour fafabzh6

    Pourrais-tu m'expliquer en quoi consiste l'option PARMBUFF, je n'en ai jamais entendu parler.

    merci

  6. #6
    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
    Dans un style plus inhabituel, et réservé à ce genre de cas avec des nombres de paramètres variables, il y a l'option PARMBUFF.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    %macro essai4 / PARMBUFF ; 
    /* --> on alimente une macro-variable SYSPBUFF avec les paramètres */
    /* Attention, SYSPBUFF contient aussi des parenthèses autour de l'ensemble des valeurs */
    DATA Essai;
    SET sashelp.class;
    a4 = catx('/', %SYSFUNC(COMPRESS(&syspbuff,%STR(%(%))))) ;
    RUN;
    %mend;
    %essai4(name,age,sex)
    Bon courage pour ton stage & pour la suite.
    Olivier
    Bon courage.
    Olivier

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 45
    Points : 31
    Points
    31
    Par défaut
    Daccord, ça peut être utile en effet.
    Merci pour ton explication

    Christophe

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 45
    Points : 31
    Points
    31
    Par défaut Problème lors du lancement de la première méthode
    Re-bonjour,

    J'ai essayer la première méthode mais il se trouve que cela me donne un message d'erreur lors de l'utilisation de plusieurs variables.. Pourriez-vous m'aider à résoudre cette erreur. Merci, d'avance.


    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
    1335  %macro essai4 (VARIABLES);
    1336  %LET VARIABLES = %SYSFUNC(COMPBL(&variables)) ; /* supprime les blancs inutiles */
    1337  %LET VARIABLES = %SYSFUNC(TRANSLATE(&variables,%STR(,),%STR())) ; /* remplace les blancs
    1337! par des virgules */
    1338  DATA batch2.Essai3;
    1339  SET batch2.class;
    1340  a4 = catx('/', &variables) ;
    1341  RUN;
    1342  %mend;
    1343  %essai4(name age sex);
     
    NOTE: The SAS System stopped processing this step because of errors.
    WARNING: The data set BATCH2.ESSAI3 may be incomplete.  When this step was stopped there were 0
             observations and 6 variables.
    WARNING: Data set BATCH2.ESSAI3 was not replaced because this step was stopped.
    NOTE: DATA statement used (Total process time):
          real time           1.82 seconds
          cpu time            0.00 seconds
     
    NOTE: Line generated by the macro variable "VARIABLES".
    1      name age sex
                --- ---
                388 202
     
    ERROR 388-185: Expecting an arithmetic operator.
     
    ERROR 202-322: The option or parameter is not recognized and will be ignored.

  9. #9
    Membre éprouvé
    Avatar de steelspirit
    Homme Profil pro
    SAS discute
    Inscrit en
    Janvier 2008
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SAS discute
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 472
    Points : 916
    Points
    916
    Par défaut
    le problème vient de CATX et du contenu de &variables :

    tu fais : a4 = catx('/', &variables) ; c'est à dire
    a4 = catx('/', name age sex) ;

    or la syntaxe est : a4 = catx('/',name,age,sex) ;

    dans une fonction les arguments sont séparées par des ,
    Avant de poser votre question, n'oubliez pas :
    FAQ, SAS DOC et de ce forum

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 45
    Points : 31
    Points
    31
    Par défaut
    Mais normalement la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %LET VARIABLES = %SYSFUNC(TRANSLATE(&variables,%STR(,),%STR())) ;
    devrait transformer "name age sex" en "name,age,sex".

    Je suppose donc que c'est cette fonction qui ne marche pas, mais je n'arrive pas à trouver sont problème. Pourrais-tu m'aider?

  11. #11
    Membre éprouvé
    Avatar de steelspirit
    Homme Profil pro
    SAS discute
    Inscrit en
    Janvier 2008
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SAS discute
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 472
    Points : 916
    Points
    916
    Par défaut
    et voila

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %LET VARIABLES = %SYSFUNC(TRANSLATE(&variables,%str(,),%nrquote( ))) ;
    avec %nrquote ça marche mieux ...

    Attention : ne pas oublié de mettre l'espace dans %nrquote : %nrquote( )
    Avant de poser votre question, n'oubliez pas :
    FAQ, SAS DOC et de ce forum

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2008
    Messages : 45
    Points : 31
    Points
    31
    Par défaut
    Merci de ton aide, ça marche nickel

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

Discussions similaires

  1. [XL-2003] Comment utiliser des images stockées dans une feuille
    Par Pastekk dans le forum Excel
    Réponses: 2
    Dernier message: 30/06/2009, 12h17
  2. Réponses: 5
    Dernier message: 06/02/2008, 16h01
  3. Réponses: 5
    Dernier message: 15/03/2007, 10h08
  4. Réponses: 1
    Dernier message: 03/02/2006, 12h35
  5. Comment stocker des mots clés dans une bas Mysql
    Par renofx1 dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 05/01/2006, 00h57

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