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

Débutez Discussion :

Macro qui effectue une proc sql et place le résultat dans une macro-variable globale : call execute


Sujet :

Débutez

  1. #1
    Membre éclairé Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Points : 881
    Points
    881
    Par défaut Macro qui effectue une proc sql et place le résultat dans une macro-variable globale : call execute
    J'ai une macro qui effectue une proc sql et place le résultat dans une macro-variable globale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    %macro FoundInTable(MyTable, MyVar, MyValue)  / store;
    	%global NbOcc;
     
    	%let NbOcc=10;
     
    	/* Recherche d'une occurence &MyValue dans &MyTableRef pour la variable &MyVar */
    	%if &MyValue ne '' %then %do;
    		proc sql noprint;
    			SELECT COUNT(1) INTO :NbOcc FROM &MyTable WHERE &MyVar=%STR(%')&MyValue%STR(%');
    		quit;
    	%end;
    %mend;
    Cette macro est lancée par un call execute dans une étape data.

    Même en intercalant un je n'arrive pas à récupérer le résultat de la proc sql;

    là j'ai initialisé NbOcc à 10 pour voir et je récupère 10 au lieu du résultat escompté (1, vérifié quand j'exécute la proc sql toute seule).

    En utilisant au retour de la macro je récupère . à la place de 1.


    Verriez-vous un moyen simple de "sortir" cette valeur de la macro ?
    Sinon je mettrai le code de la proc sql en dehors de la macro.

    Merci.

    (\ _ /)
    (='.'=) Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant

  2. #2
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    235
    Détails du profil
    Informations forums :
    Inscription : Janvier 2010
    Messages : 235
    Points : 372
    Points
    372
    Par défaut
    Bonjour Filippo,

    Je te conseille la lecture de ce lien doc sas sur call execute

    On peut y lire ceci:

    Note: Because macro references execute immediately and SAS statements do not execute until after a step boundary, you cannot use CALL EXECUTE to invoke a macro that contains references for macro variables that are created by CALL SYMPUT in that macro.

  3. #3
    Membre éclairé Avatar de Filippo
    Homme Profil pro
    Statisticien
    Inscrit en
    Mai 2004
    Messages
    864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Statisticien

    Informations forums :
    Inscription : Mai 2004
    Messages : 864
    Points : 881
    Points
    881
    Par défaut
    Merci sasadm.

    Je crois que je vais exécuter une première proc sql et placer les résultats dans une table temporaire puis merger avec la table de départ puis appliquer ma condition.

    (\ _ /)
    (='.'=) Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/08/2014, 19h51
  2. Selection dans une proc sql - compatibilité de format
    Par kalandén dans le forum SAS Base
    Réponses: 15
    Dernier message: 09/07/2012, 18h37
  3. Réponses: 17
    Dernier message: 09/03/2011, 11h14
  4. Definir un format décimal dans une proc SQL
    Par pierre24 dans le forum SAS Base
    Réponses: 1
    Dernier message: 07/08/2008, 09h36
  5. Eviter l'affichage des résultats d'une proc sql
    Par fafabzh6 dans le forum SAS Base
    Réponses: 0
    Dernier message: 30/07/2008, 14h42

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