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 28/04/2011, 10h48   #1
Membre du Club
 
Inscription : novembre 2003
Messages : 142
Détails du profil
Informations forums :
Inscription : novembre 2003
Messages : 142
Points : 58
Points : 58
Par défaut Expression régulière avec caractères de contrôles : remplacer tabulations par un saut de ligne

Bonjour à tous,
J'ai un ensemble d'observations qui peuvent contenir des tabulations. Je souhaite remplacer ces tabulations par un saut de ligne.
J'ai utilisé la fonction prxchange avec "s/\t/\n/"
Code :
1
2
3
4
5
DATA _NULL_;
   X="Blabla.	 zaerazer"; *il y a une tabulation entre Blabla. et zaerazer;
   Y=prxchange("s/\t/\n/",-1,X);
   put Y;
run;
Le résulat est le suivant :
Citation:
Blabla.\n zaerazer
SAS me colle \n à la place du saut de ligne.

Quelqu'un aurait-il une idée pour avoir ?
Citation:
Blabla.
zaerazer
Merci d'avance
enicnath est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 10h09   #2
Membre éclairé
 
Homme
statisticien
Inscription : mai 2011
Messages : 212
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 : 212
Points : 319
Points : 319
Je ne sais effectivement pas comment désigner un caractère spécial dans la deuxième partie de l'expression régulière...

En passant par une variable macro au prix de quelques acrobaties cela semble néanmoins marcher

j'ai utilisé le code "Line Feed" -->byte(10) à la deuxième ligne
mais si tu as besoin de "Carriage return" il faut remplacer byte(10) par byte(13)


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
%macro chrspec;
DATA _null_;a=byte(10);
call symput ('rl',a);
run;
DATA a;
	   X="Blabla."!!byte(9)!!"zaerazer"; *il y a une tabulation entre Blabla. et zaerazer;
   Y=prxchange("s/\t/&rl./",-1,X);
   put X ;
   put Y;
run;
%mend;
 
%chrspec;
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
 
107  %macro chrspec;
108  DATA _null_;a=byte(10);
109  call symput ('rl',a);
110  run;
111  DATA a;
112         X="Blabla."!!byte(9)!!"zaerazer"; *il y a une tabulation entre Blabla. et zaerazer;
113     Y=prxchange("s/\t/&rl./",-1,X);
114     put  X ;
115     put Y;
116  run;
117  %mend;
118
119  %chrspec;
 
NOTE: DATA statement used (Total process time):
      real time           0.00 seconds
      cpu time            0.00 seconds
 
 
 
Blabla.	zaerazer
Blabla.
zaerazer
NOTE: The DATA SET WORK.A has 1 observations AND 2 VARIABLES.
NOTE: DATA statement used (Total process time):
      real time           0.01 seconds
      cpu time            0.01 seconds
Tu as aussi la solution avec translate pour "Carriage return" en une ligne...

Code :
1
2
3
4
5
6
7
8
9
10
 
DATA a;X="Blabla."!!byte(9)!!"zaerazer";Y=translate(x,'0D'x,'09'x);put  X ;put Y;run;
 
Blabla.	zaerazer
Blabla.
zaerazer
NOTE: The DATA SET WORK.A has 1 observations AND 2 VARIABLES.
NOTE: DATA statement used (Total process time):
      real time           0.01 seconds
      cpu time            0.01 seconds
jerome_pdv2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2011, 10h37   #3
Membre du Club
 
Inscription : novembre 2003
Messages : 142
Détails du profil
Informations forums :
Inscription : novembre 2003
Messages : 142
Points : 58
Points : 58
Citation:
Envoyé par jerome_pdv2 Voir le message
...
En passant par une variable macro au prix de quelques acrobaties cela semble néanmoins marcher
...
Tu as aussi la solution avec translate pour "Carriage return" en une ligne...
Merci jerome_pdv2, je crois que ça va convenir
enicnath est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h30.


 
 
 
 
Partenaires

Hébergement Web