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 :

Macro avec boucle IF qui ne fonctionne


Sujet :

Macro

  1. #1
    Membre à l'essai
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juillet 2015
    Messages : 19
    Points : 11
    Points
    11
    Par défaut Macro avec boucle IF qui ne fonctionne
    Bonjour à tous,
    Je vais tenter d exposer mon problème le plus clairement possible:

    Je veux faire une boucle conditionnelle, afin d'indiquer à SAS de créer telle ou telle table.

    Etape 1: Je crée mes bornes de dates

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    %let periode= 120141200;
     
    PROC SQL;
         SELECT var1 into:per
         FROM matable
         WHERE var2=&periode ;
    QUIT;
     
    %let mois_debut = %sysfunc(putn(%sysfunc(intnx(month,"&per"d, 1,begin)),date9.));
    %let mois_fin = %sysfunc(putn(%sysfunc(intnx(month,"&mois_debut"d,1,end)),date9.));
    Avec ce code j'obtiens :
    mois_debut= 01JAN2015
    mois_fin = 28FEB2015


    Etape 2 : Je crée mes tables en fonction de ces dates

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    %MACRO POSTMIGR;
     
    	%IF "&mois_debut"d GE "01APR2015"d OR "&mois_fin"d GE "01APR2015"d %THEN %DO;
     
    ....code de création de ma table...
     
    	%END;
    %MEND;
    %POSTMIGR;
     
    %MACRO PREMIGR;
    	%IF "&mois_debut"d LT "01APR2015" %THEN %DO;
     
    ....code de création de ma table...
     
    	%END;
    %MEND;
    %PREMIGR;
    Plusieurs choses que je ne comprends pas :
    1) quelques soient les valeurs de mois_debut et mois_fin, la macro %POSTMIGR crée la table
    2) la macro %PREMIGR ne crée jamais de table, même si j'enlève le filtre des dates.

    Si vous avez des pistes je suis preneur, merci d'avance et bon week end

  2. #2
    Membre à l'essai
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juillet 2015
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    J'avance un peu...

    Je viens de tester en enlevant toutes les conditions, et là mes 2 macros tournent.
    Je dois donc foirer quelque chose dans les IF...

  3. #3
    Membre à l'essai
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juillet 2015
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    j'avance encore...

    le code marche avec ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	%IF (4 >= 5 /*OR "01FEB2015"d >= "01APR2015"d*/) %THEN %DO;
    mon problème vient donc de la définition des dates...si vous avez des pistes :-)

  4. #4
    Membre à l'essai
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juillet 2015
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    trouvé!!

    il fallait faire, pour info :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    %IF (%SYSEVALF("&mois_debut"d GE "01APR2015"d) OR %SYSEVALF("&mois_fin"d GE "01APR2015"d)) %THEN %DO;
    par contre je ne pige pas pourquoi ça ne marche pas sans..

    Bon week end!

  5. #5
    Membre éclairé

    Femme Profil pro
    SAS FRANCE - Support Clients France et Europe
    Inscrit en
    Février 2010
    Messages
    289
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : SAS FRANCE - Support Clients France et Europe
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 289
    Points : 886
    Points
    886
    Par défaut
    Bonjour,

    une macro-variable c'est du texte. Donc écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %IF "&mois_debut"d GE "01APR2015"d
    revient au même que d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %IF "MonTexte" GE "AutreTexte"
    La fonction sysevalf force l'interprétation de la condition.
    Cordialement,

    --
    Géraldine CADE-DESCHAMPS
    Consultante ▪ Support Clients SAS
    Tel: +33 1 60 62 12 12 ▪ support@sas.com
    www.sas.com/france
    SAS® … THE POWER TO KNOW®

  6. #6
    Membre à l'essai
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Juillet 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Juillet 2015
    Messages : 19
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par Géraldine_Cade_SAS Voir le message
    Bonjour,

    une macro-variable c'est du texte. Donc écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %IF "&mois_debut"d GE "01APR2015"d
    revient au même que d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %IF "MonTexte" GE "AutreTexte"
    La fonction sysevalf force l'interprétation de la condition.
    Ah oui bien vu!!!!!!!!!
    J'oublie toujours cette spécificité des MV!

    Merci de l'info, et bonne journée

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

Discussions similaires

  1. [XL-2003] Macro avec boucle sur une colonne et condition sur une autre
    Par Isabelle86 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 27/10/2010, 10h31
  2. macro pour code barre qui ne fonctionne pas comme elle devrait
    Par scons dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/11/2009, 13h09
  3. requete SQL avec sous requete qui ne fonctionne pas
    Par skyarnangel dans le forum Langage SQL
    Réponses: 8
    Dernier message: 06/02/2009, 14h47
  4. une boucle for qui ne fonctionne pas
    Par piffeo dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 06/11/2008, 21h52
  5. Réponses: 6
    Dernier message: 04/09/2007, 00h11

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