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érer résultat macro dans variable dans étape data


Sujet :

Macro

  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 Récupérer résultat macro dans variable dans étape data
    Bonjour,
    Je souhaiterais récupérer le résultat d'une macro dans une variable.

    La macro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    %macro FoundInTable(MyTable, MyVar, MyValue);
    	%global FoundInTable;
    	%let FoundInTable=FALSE;
     
    	proc sql noprint;
    		SELECT COUNT(1) INTO :NbOcc FROM &MyTable WHERE &MyVar=&MyValue;
    	quit;
     
    	%If &NbOcc gt 0 %THEN %let FoundInTable=TRUE;
    	&FoundInTable
    %mend;
    L'étape data :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    data titi;
    	set titi;
    	Length toto $8;
    	toto=Symget('%FoundInTable(l.ListeCodes, crem, ''10000S'')');
     
    	if toto=TRUE and tutu>0 then tata=1;
    run;
    Je me suis inspiré d'un autre post pour la syntaxe sans point-virgule à la fin de la macro. Mais je cale sur la syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    toto=Symget('%FoundInTable(l.ListeCodes, crem, ''10000S'')');

    Si quelqu'un a une idée je suis preneur.

    Merci

  2. #2
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 56
    Points : 72
    Points
    72
    Par défaut
    Avec des fonctions SCL, tu auras peut être ton bonheur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    %macro a(MyTable=, MyVar=, MyValue=);
      %let dsid=%sysfunc(open(&MyTable(where=(&MyVar="&MyValue")),i));
      %if (&dsid = 0) %then %put %sysfunc(sysmsg());
      %else %do;
          %let rc=%sysfunc(attrn(&dsid., NLOBSF ));  
      %end;
      %let rc=%sysfunc(close(&dsid.));
     
      %IF &NbOcc gt 0 %THEN %let FoundInTable=TRUE;
    	"&FoundInTable"
      %mend;
    et voici un appel possible

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    data a;
      a=%a(MyTable=sashelp.prdsale, MyVar=country, MyValue=CANADA);
    run;

  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 lucaslu,
    je n'ai pas compris où tu donnais une valeur à NbOcc.

  4. #4
    Membre régulier
    Inscrit en
    Février 2009
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 56
    Points : 72
    Points
    72
    Par défaut
    Effectivement!

    J'ai voulu garder tes noms de variables mais j'avais fais des chagements. Voilà qui devrait être mieux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    %macro a(MyTable=, MyVar=, MyValue=);
      %let FoundInTable=FALSE;
      %let dsid=%sysfunc(open(&MyTable(WHERE=(&MyVar="&MyValue")),i));
      %IF (&dsid = 0) %then %put %sysfunc(sysmsg());
      %else %do;
          %let rc=%sysfunc(attrn(&dsid., NLOBSF ));  
      %end;
     
      %IF &rc gt 0 %THEN %let FoundInTable=TRUE;
      %let rc=%sysfunc(close(&dsid.));
      "&FoundInTable"
      %mend;
    Un petit exemple d'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    data a;
      a="FRANCE";
      b=%a(MyTable=sashelp.prdsale, MyVar=country, MyValue=FRANCE);
      output;
      a="CANADA";
      b=%a(MyTable=sashelp.prdsale, MyVar=country, MyValue=CANADA);
      output;
    run;

  5. #5
    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
    Ca marche très bien.

    Merci beaucoup.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/07/2013, 14h53
  2. [XL-2007] Récupérer résultat d'une requête dans une macro
    Par guigui69 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/05/2011, 18h04
  3. [Flex4] Récupérer résultat d'une fonction dans une variable
    Par execrable dans le forum Flex
    Réponses: 8
    Dernier message: 13/04/2011, 09h53
  4. Récupérer nom d'une variable dans une macro
    Par Filippo dans le forum Macro
    Réponses: 2
    Dernier message: 01/10/2009, 12h26
  5. [Macro] Création variable dans DATA _NULL_
    Par pierre24 dans le forum Macro
    Réponses: 8
    Dernier message: 18/07/2008, 09h56

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