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)
Mais quand je veux passer par une macro, ca donne un résultat différent:
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;
parenthèse_elementaire=24(qui s'incrémente à chaque exécution) | t=0 | motif3=blanc
Merci de m'aider à identifier le problème.
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();
Partager