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 :

Faire appel à une macro SAS dans une autre


Sujet :

Macro

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Faire appel à une macro SAS dans une autre
    Bonjour ,
    Je suis débutante en langage de programmation MACRO sous SAS. J'essaye de créer une MACRO "modifnamevar" qui me permette de renommer les noms de variables d'une table en ajoutant un suffixe "_new". Etand donné que ma table contient plus de 100 variables, j'aimerais à partir d'une MACRO "getvars" récupérer la liste des noms de variables de ma table, et ensuite utiliser cette liste de noms dans la macro "modifnamevar". Le code ci-dessous qui me semble logique me donne un message d'erreur . D'avance merci pour votre aide
    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
     
    /*macro de récup de noms de variables d'une table*/
    %macro getvars(table);
        %global vlist;
        proc sql;
            select name into :vlist separated by ' '
            from dictionary.columns
            where memname = upcase("&table");
        quit;
    %mend;
     
    /*execution de la macro*/
    %getvars(faminc);
     
    /*MACRO QUI RENOMME LES NOMS DE VARIABLES EN FESANT APPEL A LA MACRO PRECEDANTE*/
    %macro modifnamevar (oldvartable, suffix);
     %getvars(table=&oldvartable);
     %local vlist;  /*vlist est dans la macro précédente*/
      %let k=1;
      %let old = %scan(&vlist, &k);
         %do %while("&old" NE "");
          rename &old = &old.&suffix;
    	  %let k = %eval(&k + 1);
          %let old = %scan(&vlist, &k);
      %end;
    %mend;
     
    /*TEST DE MA MACRO "modifnamevar" (me donne un message d'erreur)*/
    data a ;
    set faminc;
      %modifnamevar(faminc, _new);
    run;

  2. #2
    Membre éprouvé
    Avatar de m.brahim
    Homme Profil pro
    SAS / BIG DATA
    Inscrit en
    Juillet 2011
    Messages
    461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : SAS / BIG DATA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 461
    Points : 1 119
    Points
    1 119
    Billets dans le blog
    14
    Par défaut
    Bonjour,

    Je te propose cette solution:
    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
     
    data test;
    input var1 var2 var3;
    cards;
    1 2 3
    ;run;
     
    proc contents data =test out=test1 noprint nodetails;
    run;
     
    DATA _null_ ;
      set test1 end=eof;
       call execute ('proc datasets lib=WORK ;   modify test ; rename ') ;
       call execute ( compress (name) !! '=' !! compress (cats(name,'_new')));
       call execute (';quit;');
    run ;
    Cordialement
    Certification des Talents de la programmation In Memory Statistics sur HADOOP:
    http://talents-imstat.groupe-avisia....avance?uid=162

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour ton aide !
    Il fonctionne très bien ton code même si j'aurais mieux aimer y aller par une macro pour mieux comprendre ce mode de programmation !

  4. #4
    Membre éprouvé
    Avatar de m.brahim
    Homme Profil pro
    SAS / BIG DATA
    Inscrit en
    Juillet 2011
    Messages
    461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : SAS / BIG DATA
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2011
    Messages : 461
    Points : 1 119
    Points
    1 119
    Billets dans le blog
    14
    Par défaut
    Une autre solution

    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
    data test;
    input var1 var2 var3;
    cards;
    1 2 3
    ;run;
     
    data test1;
    input var11 var22 var33;
    cards;
    1 2 3
    ;run;
     
     
    %macro rename_col(prefex,table);
    proc sql noprint;
       select cats(name,'=',name,"&prefex.")
              into :list
              separated by ' '
              from dictionary.columns
              where upcase(libname) = 'WORK' and upcase(memname) =upcase("&table.");
    quit;
     
    proc datasets library = work nolist;
       modify &table.;
       rename &list.;
    quit;
    %mend rename_col;
     
    %rename_col(_new,test);
    %rename_col(_new,test1);
    Cordialement
    Certification des Talents de la programmation In Memory Statistics sur HADOOP:
    http://talents-imstat.groupe-avisia....avance?uid=162

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2017
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Excellent ! Je te remercie beaucoup Ibrahim

Discussions similaires

  1. Réponses: 3
    Dernier message: 30/05/2012, 09h24
  2. [AC-2007] Appel d'une macro 2007 dans une macro en VBA
    Par evema dans le forum IHM
    Réponses: 1
    Dernier message: 13/12/2011, 22h35
  3. Valeurs d'une macro-variable dans une table SAS
    Par patril dans le forum Macro
    Réponses: 2
    Dernier message: 03/08/2011, 13h23
  4. [Macro] %do dans une macro sas
    Par malikoo dans le forum Macro
    Réponses: 7
    Dernier message: 25/08/2008, 17h17
  5. Comment insérer une macro excel dans une macro word?
    Par max2245 dans le forum VBA Word
    Réponses: 15
    Dernier message: 07/01/2006, 17h44

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