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 variable avec suffix


Sujet :

Macro

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Décembre 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 28
    Points : 32
    Points
    32
    Par défaut Macro variable avec suffix
    Bonjour,

    J'ai plusieurs macro variables avec un suffix (seed1--seed5 par exemple) et j'aimerais pouvoir les appeler automatiquement.

    Avec une espèce de boucle du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    %macro fooMAC;
    %do i=1 %to 5;
    data foo&i.;
    x=ranuni(&seed&i); *c'est cette ligne qui ne fonctionne pas;
    %end;
    run;
    %mend fooMAC;
    Ce n'est pas exactement ce que je cherche à faire mais ça pose l'idée...

    Mais je ne trouve aucune possibilité pour appeler les macro variables contenant un suffixe. Quelqu'un peut-il m'aider ?

    D'avance merci,

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur en SAS/ Statisticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 483
    Points : 1 552
    Points
    1 552
    Par défaut
    Bonjour,
    Voici une solution et ça va marcher.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    %macro fooMAC;
    %do i=1 %to 5;
    %let seed=&i ;
    data foo&i.;
    x=ranuni(&&seed.&i);
    run;
    proc print ; run ;
    %end;
    %mend fooMAC;		%fooMAC;
    Cordialement
    Ward

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Décembre 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 28
    Points : 32
    Points
    32
    Par défaut
    Merci ! J'avais tenté quelque chose de similaire mais ça n'avait pas fonctionné... Je devais avoir fait une autre erreur.

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur en SAS/ Statisticien
    Inscrit en
    Janvier 2013
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur en SAS/ Statisticien
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 483
    Points : 1 552
    Points
    1 552
    Par défaut
    Bonjour,
    Oui, ton programme est la solution au problème.
    Mais, si la table contient 50 variables (x1)......(x50) et pour que SAS puisse les lire, avec l'options validvarname=any, il faut qu'elles soient sous la forme : '(x1)'n ……. '(x50)'n.
    Au lieu de les faire manuellement je te propose la macro %REPET(n) qui te permet de créer les 50 variables dans une macro variable «&VAR_INPUT » puis la placer après l’input.
    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  REPET (N) ;
    %GLOBAL VAR_INPUT;
    %DO I=1 %TO &N ;  
    	%IF &I=1 %THEN 	%LET VAR_INPUT = ;
    	%LET TXT ="(X&I)"n ;
    	%LET VAR_INPUT = &VAR_INPUT &TXT;
    %END ;   
    %MEND ;       %REPET(50);   %PUT VAR_INPUT = &VAR_INPUT;
     
    OPTIONS VALIDVARNAME=ANY;
    DATA NOM ;
    INFILE " C:\...\...\ \FILE.TXT" FIRSTOBS=2  ;
    INPUT &VAR_INPUT ;
    RUN ;      PROC PRINT ;  RUN ;

    %include "C:\...\...\ CODE.sas";
    Il faut préciser à SAS le répertoire où se trouve le programme que tu appelles. L’instruction %INCLUDE permet l’exécution de ce code.

    Cordialement
    Ward

  5. #5
    Membre à l'essai

    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2014
    Messages : 3
    Points : 16
    Points
    16
    Billets dans le blog
    1
    Par défaut
    Je vous remercie j avoue que cette solution me semble générale par rapport à la mienne. je vais l'essayer et vous je tiendrais au courant

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

Discussions similaires

  1. Affectation de macro-variables avec Call SymputX
    Par Filippo dans le forum Macro
    Réponses: 2
    Dernier message: 19/04/2010, 15h15
  2. [Macro] Libellé macro-variable avec proc sql
    Par auredura dans le forum Macro
    Réponses: 2
    Dernier message: 03/09/2008, 12h46
  3. [Macro] Macro variables avec condition
    Par bibette dans le forum Macro
    Réponses: 4
    Dernier message: 07/07/2008, 17h09
  4. Macro variable avec valeur contenant &
    Par Fatah93 dans le forum Macro
    Réponses: 2
    Dernier message: 19/05/2008, 15h11
  5. Utiliser les macro variables avec sql
    Par Euseibus dans le forum Macro
    Réponses: 5
    Dernier message: 25/10/2007, 18h40

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