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 :

Récupération de la valeur d'une macro-variable pour l'insérer dans une macro


Sujet :

Macro

  1. #1
    Candidat au Club
    Femme Profil pro
    Chef de projet
    Inscrit en
    Janvier 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Janvier 2012
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Récupération de la valeur d'une macro-variable pour l'insérer dans une macro
    Bonjour,

    Je voudrais utiliser dans ma boucle la valeur de ma macro-variable précédemment créée, mais ça ne marche pas. Je ne comprends pas pourquoi.
    Le but est de créer autant de table que d'observations. Si je met la valeur à la main, dans la boucle %do, ça marche très bien.

    Merci de votre aide.

    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
    %macro test;
    data _null_;
    set sashelp.titi nobs=nobs ;
    call symput ("nbobs",nobs);
    run;
    %let nb_var= %sysfunc(countc(&nobs.,"&dlm"));
    %put _user_;
    %do i=1 %TO &nb_var;
    PROC SQL;
    CREATE TABLE DETECT.CD_RMA&i AS 
    SELECT *
    FROM detect.CD_RM03b
    WHERE cnt=&i;
    QUIT;
    %end;
    %mend;
    %test;

  2. #2
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    Bonjour,
    ça te va ça?


    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
    %macro test;
    data _null_;
    set sashelp.class nobs=nobs ;
    call symput ("nobs",nobs);
    run;
     
    %do i=1 %TO &nobs;
     
    data toto;
    set sashelp.class;
    cpt=_n_;
    run;
     
    data table_&i;
    set toto;
    where cpt=&i.;
    run;
     
    %end;
    %mend;
    %test;

  3. #3
    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 : 47
    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
    Je ne comprends pas l'utilité de cette ligne de ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %let nb_var= %sysfunc(countc(&nobs.,"&dlm"));
    A part ça, Brice propose une autre solution pour coder, j'imagine qu'on pourrait encore l'écrire d'autres façons. Par exemple ce code, sans macro-programme ni besoin de compter à l'avance les observations (mais il faut avoir la liste des variables, ce qui pour le coup pourrait s'automatiser avec PROC CONTENTS + PROC SQL --> macro-variable en liste).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DATA _NULL_ ;
      DO i=1 BY 1 UNTIL(fin) ;
        DECLARE HASH h () ;
        h.DEFINEKEY("i") ;
        h.DEFINEDATA("name","age","sex","weight","height") ;
        h.DEFINEDONE() ;
        SET sashelp.class END=fin ;
        h.ADD() ;
        h.OUTPUT(DATASET:CATS("DETECT.CD_RMA",i)) ;
      END ;
    RUN ;
    Bon courage.
    Olivier

  4. #4
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    Trop fort Olivier et Bonne année 2012 dans la foulée!!!

  5. #5
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 625
    Points : 3 403
    Points
    3 403
    Par défaut
    Hello;
    sans macro, sans SQL et sans contents,...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    DATA _null_;
    n=_n_; 
    SET sashelp.class;
    call execute ("data tab"|| LEFT(_n_)|| ";"|| "set sashelp.class ;"||  "if"|| n ||"=_n_"||";run;" );
    run;
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

  6. #6
    Candidat au Club
    Femme Profil pro
    Chef de projet
    Inscrit en
    Janvier 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Janvier 2012
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Merci pour vos réponses successives. Mais je n'y arrive tjrs pas.

    Ce qui bloque c'est lorsque j'utilise la macro-variable &nobs dans la boucle %DO %TO, la création des tables est OK, ainsi que la partie DATA _NULL_ puisque lorsque je vérifie avec %PUT _USER_ la macro-variable &nobs est bien créée et la valeur 14 lui est bien associée.

    est ce que ça ne peut pas venir du fait que je suis sur Enterprise Guide?

  7. #7
    Modérateur

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2011
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2011
    Messages : 1 625
    Points : 3 403
    Points
    3 403
    Par défaut
    t'y tiens vraiment au code macro?
    Même remarque que Olivier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    %let nb_var= %sysfunc(countc(&nobs.,"&dlm"));
    tu veux compter quoi? , NOBS est un nombre , et c'est quoi &dlm.?

    pour moi c'est sa qu'il faut faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    %do i=1 %TO &nbobs;
    PROC SQL;
    CREATE TABLE DETECT.CD_RMA&i AS 
    SELECT *
    FROM detect.CD_RM03b
    WHERE cnt=&i;
    QUIT;
    %end;
    N'oubliez pas de consulter les FAQ SAS et les cours et tutoriels SAS
    N'oubliez pas de mettre votre message à si la solution donnée résout votre problème

  8. #8
    Candidat au Club
    Femme Profil pro
    Chef de projet
    Inscrit en
    Janvier 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Janvier 2012
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Je sais que cette ligne est inutile, mais comme ça ne marchais pas avec &nobs, j'ai essayé d'autres variantes!!
    En fait, j'ai juste fait une erreur dans le nom de ma macro-variable.

    merci beaucoup de votre rapidité pour nous répondre et de vos conseils précieux.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/04/2015, 11h28
  2. Récupérer un champ texte d'une page web pour l'insérer dans une autre
    Par Cubilot dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 02/06/2014, 10h08
  3. Réponses: 0
    Dernier message: 28/11/2010, 23h43
  4. [MySQL] recuperer une valeur dans une liste deroulante pour l'utiliser dans une seconde liste
    Par tortue_22 dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 12/05/2010, 11h50
  5. Réponses: 2
    Dernier message: 17/09/2009, 14h50

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