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 :

CALL SYMPUT dans une macro


Sujet :

Macro

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 57
    Par défaut CALL SYMPUT dans une macro
    Bonjour à tous,

    Je rencontre un petit souci avec un CALL SYMPUT, si quelqu'un avait une solution, je la prendrais avec grand plaisir.

    Explications :

    Je vais essayer de faire court et simple, mais l'idée est de récupérer la valeur d'une de mes variables (elle s appelle ENTREE_PRP, variable numérique), afin d'en remplir d'autres .

    Voici le 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
     
    %MACRO DEJAPRP(MMOISDEB,MMOISFIN);
     
    DATA PTAUX01RC;
     
       set PTAUX01RC ;
     
    CALL SYMPUT ('debut',ENTREE_PRP);
    %PUT &debut;
     
    %DO I=1  %TO 12 ;
         /*AUTRE*/
    	 SITUATION_&I="AUTRE";
     
    	 /*PRP*/
    	 IF MOTCD&debut=67 THEN SITUATION_&I="PRP";
     
     
    %END;
     
    RUN;
    %MEND;
    %DEJAPRP(MMOISDEB=379,MMOISFIN=390);
    Comme le montre le code, j ai besoin de créer une macro-variable, afin de récupérer la valeur de ENTREE_PRP( je ne vois pas comment faire autrement).

    A mon grand regret, ma mv %debut ne prend pas toutes les valeurs de ENTREE_PRP, mais simplement "ENTREE_PRP" , tout le temps

    Par contre, si je fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    DATA _NULL_;
    	 set PTAUX01RC ;
    CALL SYMPUT ('debut',ENTREE_PRP);
    %PUT &debut;
    run;
    La mv %debut prend bien toutes les valeurs de ENTREE_PRP.

    Voilà, en espérant que quelqu'un ait une idée, je vous souhaite une excellente journée bien ensoleillée!!! (et c est pas souvent le cas quand on habite à Lille )

  2. #2
    Rédacteur

    Homme Profil pro
    SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Inscrit en
    Avril 2009
    Messages
    2 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : SAS ALLIANCE SILVER. Consultant et formateur SAS et Cognos.
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2009
    Messages : 2 497
    Par défaut
    Si je suis bien, il faut creer et appeler une mv dans la meme etape.

    Pour cela il faut utiliser un CALL SYMPUT puis utiliser un RESOLVE.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 57
    Par défaut
    En gros oui.

    RESOLVE je ne connais pas, je vais l essayer merci.

    Par contre j ai creusé un peu sur d autres topics, ce qui m a permis d avancer et d'écrire ceci :

    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 DEJAPRP(MMOISDEB,MMOISFIN);
     
    DATA _null_; 
    SET PTAUX01RC;
    call symput('debut_'||LEFT(trim(numdo)),ENTREE_PRP);
    run;
    
    DATA PTAUX01RC;
    
       set PTAUX01RC ;
    
     
    %DO I=1  %TO 12 ;
         /*AUTRE*/
    	 SITUATION_&I="AUTRE";
     
    	 /*PRP*/
    	 IF MOTCD&debut=67 THEN SITUATION_&I="PRP";
     
     
    %END;
     
    RUN;
    %MEND;
    %DEJAPRP(MMOISDEB=379,MMOISFIN=390);
    Grace à cela, je crée bien toutes mes mv en fonction de "numdo". ça c est top!

    le problème qu'il me reste maintenant, est d'appeler la bonne mv dans ma boucle (l ancienne mv "&debut" doit etre remplacée par "&debut_numdo", avec le bon "numdo")

    je continue de chercher.

    merci pour l aide

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 57
    Par défaut
    J ai testé RESOLVE

    malheureusement il ne fonctionne pas dans ma première version.

    Le code suivant :

    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 DEJAPRP(MMOISDEB,MMOISFIN);
     
    DATA PTAUX01RC;
     
       set PTAUX01RC ;
     
    BY NUMDO;
     
    call symput('debut',ENTREE_PRP);
    var1=resolve(&debut);
    %put &var1;....
     
    RUN;
    %MEND;
    %DEJAPRP(MMOISDEB=379,MMOISFIN=390);
    me retourne "&var1" en affichage, et non pas la valeur de ENTREE_PRP.

    Je ne comprends vraiment pas tout mais je vais trouver!!

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 57
    Par défaut
    Bon, j avais déjà essayé cette solution mais sans réussite, mais ce matin à ça marche!
    J avais du faire une fausse manip vendredi.

    Pour info, j ai défini la mv en global en début de programme :

    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
     
    %MACRO DEJAPRP(MMOISDEB,MMOISFIN);
     
    %GLOBAL debut;
     
    DATA PTAUX01RC2;
     
       set PTAUX01RC ;
     
    call symput('debut',ENTREE_PRP);
     
    %DO I=1  %TO 12 ;
         /*AUTRE*/
    	 SITUATION_&I="AUTRE";
     
    	 /*PRP*/
    	 IF MOTCD&debut=67 THEN SITUATION_&I="PRP";
     
    %END;
     
    RUN;
    %MEND;
    merci!

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 57
    Par défaut
    Finalement avec %GLOBAL ça ne fonctionne pas :

    Le code suivant :

    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 DEJAPRP(MMOISDEB,MMOISFIN);
     
     
    %GLOBAL debut;
     
    DATA PTAUX01RC2;
     
       set PTAUX01RC ;
     
     
    call symput('debut',LEFT(TRIM(DEBUT_PRP)));
     
    %DO I=1  %TO 12 ;
         /*AUTRE*/
    	 SITUATION_&I="AUTRE";
     
    	 /*PRP*/
    	 IF MOTCD&debut=67 THEN SITUATION_&I="PRP";
     
     
    %END;
    ne me convient finalement pas car &debut a toujours la même valeur (la valeure de "DEBUT_PRP" pour mon premier enregistrement).

    Je n arrive pas à faire en sorte que &debut change de valeur à chaque enregistrement (même avec un %SYMDEL)

    Une idée? Merci

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

Discussions similaires

  1. Call symput dans une étape DATA
    Par alexd dans le forum Macro
    Réponses: 5
    Dernier message: 15/10/2013, 11h07
  2. Réponses: 2
    Dernier message: 21/01/2010, 17h02
  3. call symput dans une macro
    Par Manoutz dans le forum Macro
    Réponses: 8
    Dernier message: 29/06/2009, 08h46
  4. Comment insérer une macro excel dans une macro word?
    Par max2245 dans le forum VBA Word
    Réponses: 15
    Dernier message: 07/01/2006, 17h44
  5. pb dans une macro excel VB
    Par syl221 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 20/10/2005, 17h29

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