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 :

Passer un array en paramètre d'une macro


Sujet :

Macro

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Par défaut Passer un array en paramètre d'une macro
    Bonjour,

    Est il possible de passer un tableau comme argument d'une macro ?
    J'ai testé le code suivant mais ça ne marche pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    data MaTable; 
    	set MaTable; 
    	array MonArray {*} var1 var2 var3 var4;
    	do i=1 to dim(MonArray);
    		%MaMacro(MonArray[i],J0,J4);
    	end;
    run;
    Merci

  2. #2
    Membre émérite
    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
    Par défaut
    Bonjour debdev,

    En fait ta question est : comment passer en macro-paramètre des éléments du langage SAS Base comme des variables, des ARRAY etc ...

    Le problème dans ton code est que %mamacro va être exécuté en premier avant l'exécution de l'étape DATA.

    Solution : Utiliser un call execute qui va appeler ta macro pendant l'éxécution de ton étape DATA :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    DATA MaTable; 
    	SET MaTable; 
    	array MonArray {*} var1 var2 var3 var4;
    	do i=1 TO dim(MonArray);
    	    call execute('%MaMacro('||MonArray[i]||','||J0||','||J4||')');
    	end;
    run;
    Ici %mamacro va être appelé à chaque itération de ta boucle et de l'étape DATA. La valeur de MonArray[i] est passé en paramètre.

    A noter que dans cet exemple je considère J0 et J4 comme des variables de ta tables, si ce n'est pas le cas met les entre quotes.

    Bon courage,

    Steel

  3. #3
    Membre éclairé
    Inscrit en
    Janvier 2005
    Messages
    629
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 629
    Par défaut
    Salut steelspirit,

    Merci pour ta réponse. J'ai testé ton code et ça ne marche pas... à cause de moi

    Je me suis rendue compte de mes erreurs:
    1. Je lance ma macro dans une étape data alors que je ne veux pas que ça soit exécuté pour chaque observation de ma table. Donc ça m'a créé des centaines et des centaines de tables , j'ai donc stoppé l'execution.
    2. Ce que je voulais passer en paramètre, ce ne sont pas les valeurs des variables mais leurs noms.

    Bref, je m'y suis prise n'importe comment.

    Je vais réutiliser une technique que l'on m'a donnée dans un précédent topic pour tenter de récupérer les noms des variables, mettre les noms dans un tableau et mettre ce tableau en argument de la macro avec le call execute, comme tu m'as indiqué.

    Merci !
    Bonne soirée.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 15/12/2009, 11h04
  2. [VB] Passer un paramètre via une macro
    Par noznoz78 dans le forum SDK
    Réponses: 3
    Dernier message: 22/09/2007, 01h04
  3. outre passer excel et quand même exécuter une macro excel : possible en VB ?
    Par chapeau_melon dans le forum VB 6 et antérieur
    Réponses: 17
    Dernier message: 08/11/2006, 20h59
  4. [JSP] Problème pour passer un array comme paramètre
    Par MxPx_23 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 06/06/2006, 17h13
  5. Réponses: 1
    Dernier message: 23/05/2006, 14h36

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