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 :

Exécution conditionné à une macrovariable non-vide


Sujet :

Macro

  1. #1
    Membre habitué
    Homme Profil pro
    Data Manager
    Inscrit en
    Octobre 2013
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Data Manager
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2013
    Messages : 151
    Points : 167
    Points
    167
    Par défaut Exécution conditionné à une macrovariable non-vide
    Bonjour,

    Je suis débutant avec SAS et pas à l'aise avec cet outil.

    Je souhaiterais exécuter une partie de mon code uniquement si une macrovariable n'est pas vide. Et je bute.

    Dans un premier temps, je peuple ma macrovariable en concaténant les noms des tables d'une bibliothèque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    /* Liste des listing d'EI qui sont des EIG : ListeEIEIG */
    /* Il s'agit de toutes les tables de la bibliothèque Dl dont le nom commence par Liste_ei_eig_ */
    /* La liste est consitutée des noms des tables séparés par ' ' */
    PROC SQL NOPRINT ;
    	SELECT CATT("Dl.",MEMNAME) INTO :ListeEIEIG SEPARATED BY ' ' FROM SASHELP.VSTABLE WHERE UPCASE(libname) = "DL" AND UPCASE(MEMNAME) EQT "LISTE_EI_EIG_" ;
    QUIT ;
    Parfois ma macrovariable &ListeEIEIG est vide. J'aimerais donc que l'étape d'après ne s'exécute que si &ListeEIEIG n'est pas vide.

    En m'appuyant sur l'ouvrage SAS l'essentiel, j'ai testé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    /* Si &ListeEIEIG n'est pas vide */
    /* Jointure des tables listées, jointure selon SUBJECT_REF */
    /* Table résultante : Dl.Liste_EI_EIG */
    %IF %BQUOTE(&ListeEIEIG) NE "" %THEN %DO;
    	DATA Dl.Liste_EI_EIG_%SYSFUNC(today(),yymmddn.) ;
    		MERGE &ListeEIEIG. ;
    		BY SUBJECT_REF ;
    	RUN;
    %END;
    J'obtiens le message d'erreur suivant :
    WARNING: Apparent symbolic reference LISTEEIEIG not resolved.
    WARNING: Apparent symbolic reference LISTEEIEIG not resolved.
    ERROR: A character operand was found in the %EVAL function or %IF condition where a numeric operand is required. The condition
    was: %BQUOTE(&ListeEIEIG) NE ""

    Pouvez-vous me dire ce que j'ai mal compris ou mal fait pour résoudre ce problème ?

    Merci d'avance pour votre aide,

    Bonne journée

  2. #2
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    Bonjour,

    Tu peux initialiser la macro variable à vide au début de ton programme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    %let ListeEIEIG =;
    Consultez les FAQs et les anciens postes avant de poser vos questions. Merci

  3. #3
    Membre habitué
    Homme Profil pro
    Data Manager
    Inscrit en
    Octobre 2013
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Data Manager
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2013
    Messages : 151
    Points : 167
    Points
    167
    Par défaut
    Re-bonjour,

    OK, merci pour la piste ! Je ne pourrai pas tester avant la semaine prochaine. Je vous tiens au courant dès que j'aurai essayé.

    Bonne journée et bon week-end,

  4. #4
    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 Laurent.
    Le test que vous faites est valable si la macro-variable existe, pour vérifier qu'elle n'est pas vide.
    Par contre, vous pouvez essayer %IF %SYMEXIST(ListeEIEIG)) (sans &) pour tester que la macro-variable existe. Restera éventuellement à tester sa valeur.
    Bon courage.
    Olivier
    Bon courage.
    Olivier

  5. #5
    Membre habitué
    Homme Profil pro
    Data Manager
    Inscrit en
    Octobre 2013
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Data Manager
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2013
    Messages : 151
    Points : 167
    Points
    167
    Par défaut
    Bonjour,

    Je viens de tester les 2 solutions. Ca marche super bien ! La solution proposée par Olivier m'a permis d'améliorer grandement mon programme et de conditionner correctement les exécutions des différentes parties du programme.

    Donc merci beaucoup pour votre aide et votre soutien.

    Bonne journée à vous,

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

Discussions similaires

  1. [XL-2003] Aperçu avant impression d'une plage non vide
    Par mikadoo57 dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 06/01/2013, 20h30
  2. Assistant liste de choix dans une colonne non vide
    Par toniodelavega dans le forum Access
    Réponses: 1
    Dernier message: 24/11/2012, 20h48
  3. [XL-2007] Concaténer du texte a une cellule non vide
    Par amirale dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 29/08/2011, 17h06
  4. [XL-2007] Boucle jusqu'à une cellule non vide?
    Par MANOU06 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/02/2011, 23h54
  5. moyenne géométrique jusqu'à une case non vide
    Par Amélie2407 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/05/2008, 17h03

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