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 :

Mettre une liste d'entier en argument d'une macro en SAS, est ce possible?


Sujet :

Macro

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 15
    Points : 12
    Points
    12
    Par défaut Mettre une liste d'entier en argument d'une macro en SAS, est ce possible?
    Bonjour,

    J'ai un nouveau probleme qui me semble tres simple, j'ai une table de 30 series et je cherche a etudier les propriétés d'un composite constitué de 3, 4 ou 5 de ces series, (c'est a dire que je somme les séries concernées pour obtenir une serie agrégée)).
    Mon problème vient de ce que je voudrais pouvoir automatiser le procédé, c'est a dire ecrire une macro qui prend en argument la table des 30 séries et un "vecteur" contenant la liste des séries qui m'intéressent (je peux ainsi en changer a loisir).

    Exemple :

    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
    %macro AGREGE (Table,vect);
     
    DATA Cli;
    SET &Table;
    Newvar=0;
     
    %do i=1 %to dim(&vect);
    Newvar=Newvar+F&vect(&i)/dim(&vect);
    %end
     
    KEEP Newvar;
    RUN;
     
    %mend;
     
    %agrege(exemple, (3,6,8,9));
    pour agréger les séries 3 6 8 et 9
    Seulement l'objet array ne s'utilise pas comme ça et ne correspond apparemment pas a un vecteur d'entiers comme ça peut l'etre dans un langage de programmation, avec quel objet SAS peut il gérer ce genre de problème?
    Merci de votre aide,
    Cordialement,
    Stephanie

  2. #2
    Membre actif

    Profil pro
    Inscrit en
    Avril 2008
    Messages
    233
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 233
    Points : 254
    Points
    254
    Par défaut
    Je fais une chose semblable en utilisant la macro %bquote qui permet de cacher les virgules dans la valeur des paramètres de ma fonction macro.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    %let cod_cont_delta = '7605', '7606';
    %createTriangleSimple2(&societe., EX_DROC, %bquote(&cod_cont_delta.), _DELTA);
    Ça ne me pose pas de problème, parce que la valeur de cette variable sera utilisée dans une proc sql directement, avec des virgules.

    Par contre si tu veux faire un traitement indépendant pour chaque valeur - il vaut mieux peut-être que tu cherche à faire différemment, par exemple en ajoutant une couche des macros supplémentaire (qui appellera en boucle la macro spécifique pour une valeur donnée).

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    Bonjour,

    Je ne comprend pas trop pourquoi tu ne veux pas utiliser d'array, moi je ferai ça pour résoudre ton pb :

    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
    %macro AGREGE (Table= ,list= );
     
    DATA Cli;
      SET &Table;
      array vect{*} &list ;
      Newvar=0;
      do i=1 to dim(vect) ;
        Newvar=Newvar+vect(i)/dim(vect) ;
      end ;
      KEEP Newvar;
    RUN;
     
    %mend;
     
    %agrege(table=toto, list=V1 V2);
    (mais je ne suis pas sûre d'avoir bien compris ta question car des variables ne peuvent pas s'appeler 3 ou 6 dans SAS ...)

    en espérant t'avoir aidé quand même

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    Merci beaucoup, ça marche tres bien, effectivement, j'ai juste mis dans la liste F3, F6 etc... et pas juste les entiers

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 24/09/2014, 22h58
  2. Probleme d'argument dans une liste de bouton
    Par zozizozu dans le forum Tkinter
    Réponses: 2
    Dernier message: 19/05/2009, 17h54
  3. Réponses: 5
    Dernier message: 04/12/2008, 15h58
  4. Réponses: 2
    Dernier message: 02/11/2008, 20h38
  5. RANDOM sur une liste d'entiers ?
    Par simodsio dans le forum C
    Réponses: 2
    Dernier message: 18/09/2008, 12h15

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