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 et macro avec une liste de variables


Sujet :

Macro

  1. #1
    Membre à l'essai
    Femme Profil pro
    Chargée d'étude statistiques
    Inscrit en
    Mai 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chargée d'étude statistiques
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2019
    Messages : 15
    Points : 19
    Points
    19
    Par défaut Boucle et macro avec une liste de variables
    Bonjour à tous,

    Je vous remercie par avance pour l'aide que vous pourrez m'apporter.

    Je souhaite créer une boucle en utilisant un macro programme qui serait exécuté pour plusieurs variables qui n'ont pas le même nom.

    Par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    %macro test;
     
     %do ?? %to ??;
    proc freq data = ma_table;
    table cla_age_5*ben_sex_cod*&variable_a_changer /nopct nocol norow out= freq_CanColo_act;
    run;   
    %end;
     
    %mend test;
    avec des noms de variables pour &variable_a_changer pouvant être top_CanColo_act, top_CanPoum_act, etc.

    En conclusion, je ne sais pas comment faire une boucle avec une liste de variables.
    Merci par avance pour votre aide.

    Camille

  2. #2
    Expert confirmé
    Avatar de olivier.decourt
    Homme Profil pro
    Formateur R/SAS/statistiques
    Inscrit en
    Avril 2008
    Messages
    2 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 064
    Points : 4 478
    Points
    4 478
    Par défaut
    Bonjour.
    Déjà, si toutes les variables à croiser sont sur le même principe de nom (commencent par "top_Can"), pas besoin de langage macro.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    proc freq data = ma_table;
    table cla_age_5*ben_sex_cod*(top_can:) /nopct nocol norow out= freq_CanColo_act;
    run;
    Ensuite, s'il y a des noms pas cohérents, ou qui ont d'autres principes qu'un début de nom en commun (par exemple, qui se finissent par "_act"), un peu de macro-langage pour en faire la liste (via proc SQL) mais toujours pas besoin d'un macro-programme.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    PROC SQL ;
      SELECT name INTO : liste_var SEPARATED BY " "
      FROM dictionary.variables
      WHERE UPCASE(libname) = "WORK"
       AND UPCASE(memname)="MA_TABLE" /* à adapter à l'emplacement des données */
       AND UPCASE(name) LIKE '%_ACT'
      ;
    QUIT ;
    proc freq data = ma_table;
    table cla_age_5*ben_sex_cod*(&liste_var) /nopct nocol norow out= freq_CanColo_act;
    run;
    Enfin pour répondre à la demande initiale, on ne boucle pas directement sur les noms des variables. On stocke ceux-ci dans des macro-variables numérotées (par exemple NOM1 NOM2 NOM3 etc.) avec CALL SYMPUTX ou SELECT INTO, puis une boucle qui va de 1 au nombre de variables (souvent récupéré également dans une macro-variable). Si i est le compteur de boucle, &&NOM&i est le nom de la i-ème variable.
    Bon courage.
    Olivier

  3. #3
    Membre à l'essai
    Femme Profil pro
    Chargée d'étude statistiques
    Inscrit en
    Mai 2019
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chargée d'étude statistiques
    Secteur : Santé

    Informations forums :
    Inscription : Mai 2019
    Messages : 15
    Points : 19
    Points
    19
    Par défaut
    Bonjour Olivier,

    Merci beaucoup pour votre réponse. Je n'avais effectivement pas pensé à ces solutions qui semblent bien plus simple.
    Et merci aussi pour la réponse pour la boucle. Par curiosité, j'essaierai quand même de programmer ça juste pour voir si j'y arrive.

    Merci, merci!!!

Discussions similaires

  1. Réponses: 0
    Dernier message: 24/04/2014, 13h16
  2. [MySQL-5.5] ProcStock avec une liste variable d'id en paramètre
    Par hiul dragonfel dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 16/12/2013, 17h25
  3. Réponses: 2
    Dernier message: 23/07/2012, 10h08
  4. Réponses: 22
    Dernier message: 20/05/2008, 10h25
  5. Réponses: 2
    Dernier message: 04/01/2008, 09h24

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