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 :

Changer valeur variable macro simple


Sujet :

Macro

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2016
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Changer valeur variable macro simple
    Bonjour,

    Je suis un vrai débutant sur SAS... et je dois recoder plus de 100 variables. Je voudrais qu'une macro modifie la valeur de mes variables automatiquement.

    Par exemple, je voudrais rentrer une variable finley1 dans la macro et si elle a pour valeur 1 que sa valeur devienne 6 dans une nouvelle variable finley1b, comme ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    data testcode ;
      set testname ;
      if finley1=1 then finley1b=6 ;
      else if finley1=2 then finley1b=4.5 ;
      else if finley1=3 then finley1b=2.5 ;
      else if finley1=4 then finley1b=1 ;
      else if finley1=5 then finley1b=0.71 ;
      else if finley1=6 then finley1b=0.36 ;
    run ;
    Je voudrais automatiser cela, par exemple, avec une macro du style : recode (table, ancienne variable que je rentre, nouvelle variable crée). Je ne connais pas du tout bien les macros et j'ai essayé de créé quelque chose, mais je crois que c'est n'importe quoi... Ca ne me semble pas compliqué, mais je n'y arrive pas. Est-ce que quelqu'un pourrait m'aider svp ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    %macro recode(table,oldvar,newvar);
      data limoR; set &table; 
      put &newvar;
      IF &oldvar=1 then &newvar=6;
      else if &oldvar=2 then &newvar=4.5;
      else if if &oldvar=3 then &newvar=2.5;
      else if &oldvar=4 then &newvar=1;
      else if &oldvar=5 then &newvar=0.71;
      else if &oldvar=6 then &newvar=0.36;
    run;
    %mend;
     
    %recode(limo,alibi1,alibi1r);
    Merci d'avance !

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Mars 2013
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2013
    Messages : 48
    Points : 63
    Points
    63
    Par défaut
    Bonjour Foody,

    Ton code ne marchait pas parce qu'il y avait déjà un If en sur ta troisième ligne. /* Je l'ai mis en commentaire */
    Lorsque tu as un cas comme ça, il faut mettre l'option mprint qui permet d'afficher le code compiler par SAS. Je pense qu'avec ça tu aurais pu voir d'où venait l'erreur.

    Bon courage pour la suite.

    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 recode(table ,oldvar ,newvar );
      data Limor; 
    		set &table.; 
    		put &newvar;
    	  IF &oldvar=11 then &newvar=6;
    	  else if &oldvar=12 then &newvar=4.5;
    	  else if /*if */&oldvar=13 then &newvar=2.5;
    	  else if &oldvar=14 then &newvar=1;
    	  else if &oldvar=15 then &newvar=0.71;
    	  else if &oldvar=56 then &newvar=0.36;
    run;
    %mend;
     
    %recode(sashelp.class,age, AgeModif);
    N'oubliez pas de cliquer sur résolu si votre problème est résolu .

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2016
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Merci pour ta réponse. J'ai fini en faisant plusieurs essais à avoir quelque chose comme toi. mais au final, je me suis rendu compte qu'il fallait que j'applique cette macro plus de 1000 fois (plus de 1000 variables en colonnes), du coup, j'avais essayé de combiner une sorte de DO.. ENd avec la macro mais ça ne marchait pas bien. Du coup, je suis passé par un ARRAY. Et ca semble fonctionner.

    Merci encore en tout cas


    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
     /* Change the values*/
    data limo2 (drop=i); /* données dont les valeurs sont à modifier */
    set limo;
    array glass{*}  Finley1-numeric-Huisli29;	/* passer en revue les variables en colonne*/
    do i=1 to dim(glass);
    if glass{i}=1 then glass{i}=6*200; /*reste à multiplier par le volume de 200mL - xi est en mL/d*/
    else if glass{i}=2 then glass{i}=4.5*200;
    else if glass{i}=3 then glass{i}=2.5*200;
    else if glass{i}=4 then glass{i}=1*200;
    else if glass{i}=5 then glass{i}=0.71*200;
    else if glass{i}=6 then glass{i}=0.29*200;
    else if glass{i}=7 then glass{i}=0.13*200;
    else if glass{i}='' then glass{i}=0;
    else if glass{i}=8 then glass{i}=0; /* à verifier*/
    end;
    run;

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

Discussions similaires

  1. Boucle d'une macro simple jusqu'a une valeur d'une cellule
    Par Chribusquets dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/02/2011, 19h31
  2. Réponses: 2
    Dernier message: 06/09/2010, 16h05
  3. Changer valeur variable global dans une fonction callback
    Par bog333 dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 02/10/2008, 15h14
  4. changer valeur variable de form dans jsp
    Par bilobar dans le forum Struts 1
    Réponses: 0
    Dernier message: 06/08/2008, 12h12
  5. Changer valeur de variable sur autre formulaire ?
    Par olivierc25 dans le forum IHM
    Réponses: 4
    Dernier message: 09/04/2007, 14h30

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