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 :

Exécution élégante d'une macro


Sujet :

Macro

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Exécution élégante d'une macro
    Bonjour,

    Mon problème est le suivant :
    Un de mes codes SAS nécessite d'exécuter la macro %calcul(prod=); pour un certain nombre de produits : A, B, G, Z. La solution la plus évidente est d'appeler la macro %calcul pour chaque produit successivement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    %calcul(prod=A);
    %calcul(prod=B);
    %calcul(prod=G);
    %calcul(prod=Z);
    Le souci dans cette manière de faire est que la liste des produits, en plus d'être longue, est amenée à changer assez régulièrement. Il faudrait donc supprimer et ajouter un nombre conséquent de lignes à chaque traitement, ce qui est assez fastidieux.

    Je souhaiterais donc que le traitement s'effectue de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    %let listeProduit = A, B, G, Z;
    
    %macro traitement(liste=);
    
       %do "pour chaque" produit "de" &liste;
          %calcul(prod=&produit);
       %end;
    
    %mend;
    
    % traitement(liste=&listeProduit);
    L'utilisateur final n'aurait ainsi qu'à modifier le contenu de la macro-var listeProduit.

    Malheureusement, je ne trouve le moyen de réaliser cette procédure de traitement. Dans les langages de programmation plus classiques (VBA ou C par ex.), cela revient à définir un array. Mais j'ai compris en lisant l'aide en ligne de SAS que les array de SAS ont une utilisation différente.

    Bref, je nage.
    Est-ce que quelqu'un a une idée de solution?

    Merci pour votre aide!

  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 : 47
    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.
    La solution la plus élégante me semble PARMBUFF. Il y a quelques posts dans ce forum qui détaillent (les explications sont ici ).
    Dans ton cas ça donnerait quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    %MACRO traitement / PARMBUFF ;
       %LET i = 1 ;
       %LET produit = %SCAN(&syspbuff, &i) ;
       %DO %UNTIL (&produit = ) ;
          %calcul(prod=&produit) ;
          %LET i = %EVAL(&i+1) ;
          %LET produit = %SCAN(&syspbuff, &i) ;
       %END ;
    %MEND ;
    /* et pour exécuter : */
    % traitement(A, B, G, Z);
    Olivier

  3. #3
    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
    Bonjour,

    Sinon il y a également ma macro List2Macr :
    http://www.developpez.net/forums/d58...s/#post3622556

    qui converti une liste en macro-variables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    %let listeProduit = A, B, G, Z;
    
    %macro traitement(liste=);
    
       %List2Macro(liste=&listeProduit,dlm=',',mv=produit);
      
       %do i=1 %to &nb_produit;
          %calcul(prod=&&produit&i);
       %end;
    
    %mend;
    
    % traitement(liste=&listeProduit);
    Steel

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Si tu n'as pas trouvé de solution en voici une ::
    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
     
     
    %let listeProduit = A # B #G # Z;
     
    %macro traitement(liste=);
     
       %let i=1;
       %let produit=%scan(&liste,&i,#);
     
       %do %while ("&produit" ne "");
    	        %calcul(prod=&produit);
    	   	%let i=%eval(&i+1);
    	        %let produit=%scan(&liste,&i,#);
       %end;
     
    %mend;
    %traitement(liste=&listeProduit);
    Cordialement.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour, Merci pour vos réponses! Je les expérimente demain au bureau.

Discussions similaires

  1. Exécution périodique d'une macro
    Par PPz78 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/01/2009, 09h17
  2. Exécution automatique d'une macro
    Par John81 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/12/2008, 19h19
  3. Réponses: 0
    Dernier message: 28/05/2008, 15h15
  4. Syntaxe:Exécution automatique d'une macro
    Par bebertol dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/06/2007, 11h20
  5. exécution automatique d'une macro
    Par faayy dans le forum Access
    Réponses: 12
    Dernier message: 15/06/2005, 14h52

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