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é
    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
    Bonjour,

    Tu peux initialiser la macro variable à vide au début de ton programme:
    Consultez les FAQs et les anciens postes avant de poser vos questions. Merci

  3. #3
    Membre habitué
    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é
    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é
    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,

###raw>template_hook.ano_emploi###