Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > SAS Base
SAS Base Forum d'entraide sur SAS base : étape data, procédures non statistiques, procédures non graphiques, SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/12/2011, 10h30   #1
Membre éclairé
 
Homme
statisticien
Inscription : mai 2011
Messages : 213
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : statisticien
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : mai 2011
Messages : 213
Points : 319
Points : 319
Par défaut Condensation de motifs répétés dans une expression régulière

Bonjour,

je cherche des motif simultanément dans plusieurs variables VAR_1 à VAR_4 par exemple.

Pour des raisons pratiques de traitement, et de temps de calcul j'ai "condensé" mes 4 variables dans une variable chaine avec une ligne

Code :
chaine=':VAR_1:'!!strip(var_1)!!':VAR_2:'!!strip(var_2)!!':VAR_3:'!!strip(var_3)!!':VAR_4:'!!strip(var_4)!!':FIN:';
Je voudrais faire un certain nombre de manipulations identiques sur chaque variable dans cette chaine.

Ici un exemple de cas simple (.*) --> recherche des valeurs des VAR_i dans chaine.

J'ai une expression régulière qui marche regexp.

Je voulais faire une expression régulière "condensée" regexp2 mais elle ne marche pas...

Auriez vous une idée où je m'y prend mal ou bien est ce tout simplement possible ?

Les expressions sont de longueur identique sur l'exemple et on peut se demander pourquoi je cherche une écriture "condensée" qui ne marche pas pour l'instant.
Disons que dans l'exemple je cherche quelque chose de simple (*.) mais en réalité je vais devoir chercher des choses compliqués qui seront longues à écrire et une écriture condensée serait donc beaucoup plus pratique.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
DATA a;
length chaine $300.;
chaine=':VAR_1: AAAAAAAA:VAR_2:BBBBBBBBBB:VAR_3:CCCCCCCCC:VAR_4:DDDDDDDD:FIN:';output;
chaine=':VAR_1::VAR_2:BBBBBBBBBB:VAR_3:CCCCCCCCC:VAR_4:DDDDDDDD:FIN:';output;
chaine=':VAR_1: AAAAAAAA:VAR_2::VAR_3:CCCCCCCCC:VAR_4:DDDDDDDD:FIN:';output;
chaine=':VAR_1: AAAAAAAA:VAR_2:BBBBBBBBBB:VAR_3::VAR_4:DDDDDDDD:FIN:';output;
chaine=':VAR_1: AAAAAAAA:VAR_2:BBBBBBBBBB:VAR_3:CCCCCCCCC:VAR_4::FIN:';output;run;
 
DATA b; 
SET a;
length var1 $100. var2 $100. var3 $100. var4 $100.;
retain REGEXP regexp2;
IF _n_=1 then do;
REGEXP=prxparse('/:VAR_1:(.*):VAR_2:(.*):VAR_3:(.*):VAR_4:(.*):FIN:/');
regexp2=prxparse('/:VAR_1:(?:(.*)(?::VAR_2:|:VAR_3:|:VAR_4:|:FIN:)){4}/');
end;
test=prxmatch(REGEXP,chaine);
var1=prxposn(REGEXP,1,chaine);
var2=prxposn(REGEXP,2,chaine);
var3=prxposn(REGEXP,3,chaine);
var4=prxposn(REGEXP,4,chaine);
test2=prxmatch(regexp2,chaine);
var1_=prxposn(regexp2,1,chaine);
var2_=prxposn(regexp2,2,chaine);
var3_=prxposn(regexp2,3,chaine);
var4_=prxposn(regexp2,4,chaine);
run;
On obtient var_1 à var_4 conforme avec regexp

Par contre rien de bon dans regexp2 , on obtient seulement le contenu de var_4 dans var1_ :/
jerome_pdv2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h20.


 
 
 
 
Partenaires

Hébergement Web