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 programme pour répéter un texte n fois


Sujet :

Macro

  1. #1
    Membre Expert
    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
    Par défaut Macro programme pour répéter un texte n fois
    Bonjour,
    J’ai besoin de répéter un texte ‘n’ fois pour le placer dans le programme SAS. J’ai donc, créé la macro suivante. Si je l’exécute à part elle engendre des erreurs même on la plaçant après l’input. Mais elle fonctionne correctement si je la place après le title avec le proc print.
    Merci d’avance


    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  n_fois (n) ;
     
    %do i=1 %to &n ;  %bquote('(M&i)'n) %end ;   
     
    %mend ;                  %n_fois (3) ;
     
    options validvarname=any;
    DATA test;
    input %n_fois (3) ;  
    cards;
    30 10 100
    40 20 200
    50 30 300
    ;
    run;    
    PROC PRINT ; title %n_fois (3) ; RUN ;

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    747
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 747
    Par défaut
    il y a la fonction REPEAT qui existe

  3. #3
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2002
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 244
    Par défaut
    Salut, je n'ai pas bien compris le but de ton code

    Mais voici une version différente qui fonctionne.

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    %macro  n_fois (n) ;
     %global var_input;
     
    %do i=1 %TO &n ;  
    	%if &i=1 %then 
    		%let var_input = ;
    	%let txt = M&i;
    	%let var_input = &var_input &txt.n;
    %end ;   
     
    %mend ;                  
     
    %n_fois(3)
     
    %put VAR_INPUT = &var_input;
     
    options validvarname=any;
    DATA test;
    input &var_input ;  
    cards;
    30 10 100
    40 20 200
    50 30 300
    ;
    run;    
    PROC PRINT ; title &var_input ; RUN ;

  4. #4
    Membre Expert
    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
    Par défaut
    Merci Loo7
    Pour importer un fichier txt dont le nom des variables : (Var1) (Var2)......(Varn).
    Afin que SAS puisse lire ces variables avec l'options validvarname=any; , et sans faire le travail manuellement, il faut que le nom de chaque variable ait la forme : '(Var1)'n ……. '(Varn)'n.
    C'est le but de la macro %n_fois(3)que j'ai rectifié grâce à ton aide.
    NB: l'importation ne marche qu'avec firstobs=2 ;

    Bien cordialement

    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
    18
    19
    20
    21
    22
    23
    24
    25
     
    %macro  n_fois (n) ;
     %global var_input;
     
    %do i=1 %TO &n ;  
    	%IF &i=1 %then 
    	%let var_input = ;
    	%let txt ="(M&i)"n ;
    	%let var_input = &var_input &txt;
    %end ;   
     
    %mend ;                  
     
    %n_fois(3);               %put VAR_INPUT = &var_input;
     
    options validvarname=any;
    DATA test;
    input &var_input ;  
    cards;
    30 10 100
    40 20 200
    50 30 300
    ;
    run;    
    PROC PRINT ;  RUN ;

  5. #5
    Membre éclairé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2002
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 244
    Par défaut
    Super .

    N'oublie pas de cliquer sur le bouton

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 03/07/2014, 15h49
  2. [WD-2010] macro bascule pour insérer du texte
    Par michir dans le forum VBA Word
    Réponses: 8
    Dernier message: 10/06/2011, 15h24
  3. Réponses: 2
    Dernier message: 05/04/2011, 22h07
  4. Macro unique pour plusieurs fichiers texte
    Par kikim78 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/12/2009, 09h19
  5. Excel:probleme pour transformer du texte en nombre par macro
    Par pcheval dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/11/2005, 22h18

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