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 sous 9.4 pour ajouter des préfixes à des colonnes


Sujet :

Macro

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Mai 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Mai 2021
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Macro sous 9.4 pour ajouter des préfixes à des colonnes
    Bonjour à tous,

    Après des heures à regarder le forum, je me résous à vous solliciter car j'ai séché sur une macro sous 9.4.
    En synthèse :
    - Je travaille dans le swork, table "TOTO"
    - J'ai une table avec 8 colonnes fixes et X colonnes variables après les fixes, en fonction de mon extraction le nombre de colonnes n'est jamais le même.
    - Pour ces colonnes variables je souhaite ajouter un préfixe type "DATA_"+nom d'origine.

    Donc j'essaye de faire ça dans une macro mais rien ne va, j'ai trouvé un bon de macro que j'essaye d'adapter :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    %macro prefix_all (lib=swork, DS=TOTO, Prefix=DATA_, VarExclure=Var1 var2 var3 var4 var5 var6 var7 var8); /*j'essaye d'exclure les 8premières variables*/
     
    proc contents data=%cmpres(&lib..&ds) out=_contents %if &VarExclure ne %then (where=(upcase(name) not in (%upcase (&VarExclure)))) ; 
    noprint ;
    run ;
     
    data _null_ ;
    set _contents (keep=name) ;
    call execute (“PROC DATASETS lib=&lib NODETAILS NOLIST; MODIFY &ds ; RENAME “!! name !! compress(“=&prefix” !! name) !! “;quit;”);
    run ;
    %mend ;
    Et en fait, rien ne se passe... je m'attendais à ce que ma table TOTO soit réécrite avec les nouveaux noms de colonnes, mais non. C'est comme si la macro ne s'exécutait pas du tout.

    Je pense que j'ai raté quelque chose ?
    Si jamais une âme charitable pouvait me montrer la lumière.

    Merci,

  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
    Bonjour.
    Commençons par une piste toute bête : est-ce qu'en plus du code ci-dessus, qui compile la macro, tu l'as exécutée ?
    Bon courage.
    Olivier

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Mai 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Mai 2021
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Hmmm je dirais que non... je n'ai pas l'habitude des macros, je fais surtout des proc sql (rsubmit
    Il faut que je teste ça...

  4. #4
    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.
    Le but d'un macro-programme est de stocker du code pour pouvoir l'utiliser en plusieurs occasions, avec des paramètres différents. Il y a donc deux phases dans la vie d'une macro : 1) sa définition et compilation (quand on exécute le code de %MACRO à %MEND) et 2) son exécution, c'est à dire quand le code que contient le macro-programme est lancé avec le paramétrage proposé par ses arguments. La phase 2 correspond à %nom_macro_programme(argument=valeur) ; où on peut éventuellement laisser tous les arguments à leur valeur par défaut.

    Comme tu travailles sur un serveur SAS, attention : si le macro-programme est défini en local (hors RSUBMIT / ENDRSUBMIT) il ne peut être utilisé qu'en local ; de même s'il est défini sur le serveur on ne peut l'exécuter que sur le serveur. Puisque tout ce que tu veux modifier est dans la work du serveur, autant définir sur le serveur ta macro (en utilisant la bibliothèque WORK et non SWORK), non ?
    Bon courage.
    Olivier

Discussions similaires

  1. [AC-2010] Problème pour ajouter des colonnes après avoir effectué un pivot
    Par flobuzz dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 13/09/2018, 16h56
  2. Réponses: 3
    Dernier message: 18/09/2013, 18h01
  3. Macro word pour ajouter () à des références
    Par potiocom dans le forum VBA Word
    Réponses: 2
    Dernier message: 25/10/2011, 08h50
  4. [AC-2003] Macro pour ajouter des nouvelles colonnes pour actualiser une table
    Par Carole2810 dans le forum VBA Access
    Réponses: 1
    Dernier message: 16/03/2010, 10h08
  5. script pour ajouter des utilisateurs postgres
    Par xopos dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 16/08/2004, 10h49

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