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 :

Expressions régulières dans une %macro


Sujet :

Macro

  1. #1
    Membre du Club
    Femme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Novembre 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 86
    Points : 48
    Points
    48
    Par défaut Expressions régulières dans une %macro
    Bonjour,
    J'ai un problème à utiliser des expressions régulières dans une macro. Dans une étape Data, le code suivant retourne le résultat suivant :

    Parenthèse_elementaire=1 | t=1 | motif3= (3+4)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DATA a;
    length calcul $100.;
    calcul="(5+3)*2*((1>=0;-4;5)>=0;7;5*(3+4))";output;
    run;
    DATA b;
    SET a;
    parenthese_elementaire=prxparse('s/(.*)(\()([^\(\)]*)(\))(.*)/$1[$3]$5/');
    t=prxmatch(parenthese_elementaire,calcul);
    motif3=translate('('!!strip(prxposn(parenthese_elementaire,3,calcul))!!')','()','[]');
    output;
    run;
    Mais quand je veux passer par une macro, ca donne un résultat différent:
    parenthèse_elementaire=24(qui s'incrémente à chaque exécution) | t=0 | motif3=blanc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    proc sql;
    create table a (calcul char(1000));
    insert into a values ("(5+3)*((1>=0;-4;5)>=0;7;5*(3+4))");
    quit;
    %macro decoupe();
    proc sql;
    select calcul into :calcul from a;
    quit;
    %let parenthese_elementaire=%sysfunc(prxparse('s/(.*)(\()([^\(\)]*)(\))(.*)/$1[$3]$5/'));
    %let t=%sysfunc(prxmatch(&parenthese_elementaire,&calcul));
    %let motif3=%sysfunc(prxposn(&parenthese_elementaire,3,&calcul));
    %mend;
    %decoupe();
    Merci de m'aider à identifier le problème.

  2. #2
    Membre du Club
    Femme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Novembre 2011
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 86
    Points : 48
    Points
    48
    Par défaut
    Je viens de trouver le prob, il faut enlever les quotes pour qu'il arrive à parser l'ER:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %let parenthese_elementaire=%sysfunc(prxparse('s/(.*)(\()([^\(\)]*)(\))(.*)/$1[$3]$5/'));

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 30/06/2010, 15h23
  2. Problème d'expression régulière dans une requète
    Par Jarode01 dans le forum Requêtes
    Réponses: 3
    Dernier message: 31/08/2009, 14h36
  3. Expression régulière dans une base de données
    Par Friedrick dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 25/06/2009, 20h59
  4. [RegEx] Utiliser une expression régulière dans une requête
    Par Tobleron dans le forum Langage
    Réponses: 2
    Dernier message: 18/02/2007, 19h00
  5. Réponses: 1
    Dernier message: 03/02/2006, 12h35

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