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 :

Paramètres d'une macro : utiliser les données d'une table ?


Sujet :

Macro

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Paramètres d'une macro : utiliser les données d'une table ?
    Bonjour,
    J'ai écrit une macro SAS qui fonctionne... jusque là tout va bien.
    Pour l'exécuter, il faut entrer 3 paramètres : ESA ESS et beta. En tout, j'ai 72 combinaisons de ces paramètres, qui sont contenues dans une table de ce genre (appelée param) :
    ESA ESS beta
    0.25 0.25 0.1
    0.25 0.33 0.1
    0.25 0.25 0.2
    0.25 0.33 0.2
    0.33 0.25 0.1
    0.33 0.33 0.1
    ...
    Donc je voudrais exécuter ma macro sans avoir à écrire 72 fois '%nb(ESA, ESS, beta);' pour éviter de faire des erreurs.
    J'aimerais savoir s'il y a un moyen d'utiliser les données qui sont dans ma table ci-dessus.
    J'ai en fait essayé de créer une étape data avec des call symput :
    data param;
    set param;
    call symput ('ES_A', ES_A);
    call symput ('ES_S', ES_S);
    call symput ('beta', beta);
    run;
    Mais lorsque je lance ma macro, comme ceci : %nb(&ES_S, &ES_A, β);
    je n'obtiens un résultat que pour la dernière ligne de ma table.

    Si vous pouviez m'aider, ça serait vraiment sympa.
    Merci d'avance.
    Ju_mp

  2. #2
    Nouveau membre du Club
    Inscrit en
    Novembre 2004
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 25
    Points : 30
    Points
    30
    Par défaut
    Bonjour,

    Il faut utiliser un pgm comme ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    DATA _null_;
    SET param end=fin;
    call symput("ES_A" || compress(_N_),ES_A);
    call symput("ES_S" || compress(_N_),ES_S);
    call symput("beta" || compress(_N_),beta);
    call symput("M_N", compress(_N_));
    run;
    Ainsi pour chaque ligne de la table PARAM, tu récupéres 3 macros variables :

    ES_A1, ES_S1 et beta1 pour la ligne 1, ...

    M_N te donne le nombre de lignes traités et permet ensuite de faire une boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    %do i=1 %to &M_N;
        %nb(&&ES_S&i,&&ES_A&i, &&beta&i);
        run;
    %end;

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Merci beaucoup, ça marche du tonnerre.
    Je me disais bien qu'il fallait que je fasse une boucle, mais je ne voyais pas trop comment récupérer les valeurs une par une.
    Encore merci.
    Ju

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/01/2013, 09h01
  2. Utiliser les données d'une table comme champs d'une autre table
    Par Jalabert dans le forum Modélisation
    Réponses: 6
    Dernier message: 03/06/2010, 08h51
  3. Comment utiliser les données d'une base de données
    Par tresorkoul dans le forum JDeveloper
    Réponses: 8
    Dernier message: 10/07/2009, 14h47
  4. Réponses: 0
    Dernier message: 01/04/2009, 10h12
  5. Comment lire/utiliser les données d'une ADOTable ?
    Par melles dans le forum Bases de données
    Réponses: 3
    Dernier message: 02/09/2007, 04h43

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