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 :

Boucle IF /THEN dans une macro


Sujet :

Macro

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 11
    Points : 3
    Points
    3
    Par défaut Boucle IF /THEN dans une macro
    Bonjour

    Je souhaite transformer les données de plusieurs variables d'une table en transformant les valeurs "VRAI" par 1 et les variables "FAUX" par 0 pour chaque variable.
    Je souhaiterai faire cela à l'aide d'une macro.
    Je suis stoppé net par une erreur :

    "ERROR: A character operand was found in the %EVAL function or %IF condition where a numeric operand is required. The condition was:
    1 to
    ERROR: The %FROM value of the %DO I loop is invalid.
    ERROR: The macro VRAIF_NUM will stop executing."


    Si vous pouviez me dire où se trouve le pb dans mon code je vous en serais très reconnaissant .

    Ci après mon code
    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 VRAIF_NUM; 
    %Let variable = A_B B_C D_E F_G ;
     
    DATA = _NULL_;
    ARRAY VECTEUR &variable; 
    CALL SYMPUT ('nombre',dim(vecteur));
    RUN; 
    %PUT &NOMBRE; 
     
        %Do i=1 to %to &NOMBRE; 
                    %LET extract=%SCAN(&variable;&i);
                        %IF &extract = 'VRAI' %THEN %LET &extract.N = 1; 
                        %IF &extract  ='FAUX' %THEN %LET &extract.N = 0; 
            %END; 
     
    %MEND VRAIF_NUM; 
     
    DATA Work.Test2; 
    SET Work.Test1; 
     
    %VRAIF_NUM ;
     
    RUN;

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 11
    Points : 3
    Points
    3
    Par défaut solution avec ARRAY
    j'ai trouvé une méthode qui fonctionne sans passer par une macro :

    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
     
    DATA work.Test2; 
    SET work.Test1; 
     
     
     
    ARRAY variable {*} A_B C_D E_F G_H;
     
    Do i=1 to dim(variable);
     	If variable{i} = 'VRAI' THEN variable{i} = 1;
    	ELSE IF variable{i} = 'FAUX' THEN variable{i} = 0;
     
    END; 
     
    RUN;
    je reste toutefois preneur d'une solution en passant par une macro :-)

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Avec une macro

    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 VRAIF_NUM(entre=, sortie=); 
    /*liste des variables*/
    proc contents data=&entre out=tab(keep=NAME) noprint ; 
    run;
    proc sql noprint;
    select * into:variable separated by ' ' from tab;
    quit;
     
    /*nombre de variables*/
    DATA _NULL_;
    ARRAY VECTEUR &variable; 
    CALL SYMPUT ('nombre',dim(vecteur));
    RUN; 
     
    /*transformation*/
    data &sortie ;
    SET &entre ;
    %DO i=1 %TO &NOMBRE ; 
    	%LET extract=%SCAN(&variable,&i);
    	IF &extract ="VRAI" THEN &extract.N ="1"; 
    	IF &extract ="FAUX" THEN &extract.N ="0";
    %END; 
    run;
    %MEND VRAIF_NUM; 
     
    %VRAIF_NUM(entre=work.test1, sortie=work.test2);

Discussions similaires

  1. Boucle if dans une macro
    Par zajeanne dans le forum Débutez
    Réponses: 0
    Dernier message: 20/01/2014, 11h47
  2. Faire une boucle dans une macro
    Par dev_grou dans le forum Macro
    Réponses: 5
    Dernier message: 09/04/2010, 17h48
  3. [XL-2003] boucles dans une Macro Excel?
    Par answer3 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/12/2009, 20h07
  4. Réponses: 18
    Dernier message: 12/05/2009, 14h44
  5. Suppression des doublons par une boucle dans une macro
    Par axamen dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/02/2009, 09h37

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