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

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

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

    Informations forums :
    Inscription : octobre 2013
    Messages : 144
    Points : 166
    Points
    166

    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 363
    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 363
    Points : 2 298
    Points
    2 298

    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
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Loire (Rhône Alpes)

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

    Informations forums :
    Inscription : octobre 2013
    Messages : 144
    Points : 166
    Points
    166

    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
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Formateur R/SAS/statistiques
    Secteur : Conseil

    Informations forums :
    Inscription : avril 2008
    Messages : 1 840
    Points : 4 089
    Points
    4 089

    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
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Loire (Rhône Alpes)

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

    Informations forums :
    Inscription : octobre 2013
    Messages : 144
    Points : 166
    Points
    166

    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