
Enlever certains caractères spéciaux avec la fonction TRANSLATE
février 23, 2009Les 256 caractères ASCII (American Standard Code for Information Interchange) comprennent :
- les lettres de l’alphabet,
- les chiffres
- des lettres accentuées propres à certains langues comme le E accent aigüe
- des caractères non imprimables comme un tabulation, un retour à la ligne ou un espace.
Ils peuvent notamment arriver dans une table suite à l’importation d’un fichier Excel où ils sont présents. En général, la plupart de ces caractères spéciaux ne sont pas désirés.
Quels sont ces caractères et comment les éliminer ?
1. Quels sont les 34 caractères non imprimables ?
Les caractères ASCII sont numérotés :
- de 0 à 256 (valeur décimale)
- de 00 à FF (valeur hexadécimal)
- Unicode
Les 33 premiers caractères (0 à 32) et le caractère 127 sont forment les caractères non imprimables.
DEC HEX Description 0 00 NUL Null 1 01 STX Start of Header 2 02 SOT Start of Text 3 03 ETX End of Text 4 04 EOT End of Transmission 5 05 ENQ Enquiry 6 06 ACK Acknowledge 7 07 BEL Bell 8 08 BS BackSpace 9 09 HT Horizontal Tabulation 10 0A LF Line Feed 11 0B VT Vertical Tabulation 12 0C FF Form Feed 13 0D CR Carriage Return 14 0E SO Shift Out 15 0F SI Shift In 16 10 DLE Data Link Escape 17 11 DC1 Device Control 1 (XON) 18 12 DC2 Device Control 2 19 13 DC3 Device Control 3 (XOFF) 20 14 DC4 Device Control 4 21 15 NAK Negative acknowledge 22 16 SYN Synchronous Idle 23 17 ETB End of Transmission Block 24 18 CAN Cancel 25 19 EM End of Medium 26 1A SUB Substitute 27 1B ESC Escape 28 1C FS File Separator 29 1D GS Group Separator 30 1E RS Record Separator 31 1F US Unit Separator 32 20 [Space] Space 127 7F DEL Delete Source : ascii-table.com
2. Un exemple, le symbole « Line Feed »
L’image ci-dessous présent une feuille Excel. La cellule A1 contient un passage à la ligne. Celui-ci indique la présence du caractère spéciale 0A (valeur hexadécimale).
Après la création d’une table SAS à partir d’un PROC IMPORT, cela donne un petit carré qui ne s’imprimera pas.
2. Comment éliminer des caractères spéciaux?
En fait, deux choix se présentent :
- soit vous éliminez les caractères spéciaux,
- soit vous les remplacez par des blancs
Dans les deux cas, la fonction TRANSLATE peut servir.
Créer le data set pour l’exemple :
data sasref; f1=cat('Partie1','0A'x,'Partie2'); run;
Enlever le caractères spécial spécial grâce à la fonction TRANSLATE : la fonction TRANSLATE est composée de trois paramètres : le texte d’origine, les nouveaux caractères et les caractères à remplacer.
data sasref; set sasref; f2=translate(f1,' ','0A'x); run;
Le résultat : J’ai choisi de créer une nouvelle variable F2 afin d’afficher simultanément le texte avant et le texte après.
La différence entre les fonctions TRANSLATE et TRANWRD :
- A la différence de la fonction TRANWRD, chacune des lettres est remplacée et non des mots.
- De plus, ici les caractères à remplacer sont cités en dernier (3ème paramètre de la fonction TRANSLATE). Tandis que TRANWRD commence par eux (2ème paramètre de la fonction TRANWRD).
Remplacer plus d’un caractère : vous pouvez lister autant de caractères hexadécimaux dans le troisième paramètre de la fonction TRANSLATE.
Ici, SAS remplacera les dix premiers caractères ASCII numérotés 00, 01, 02,…09, 0A, s’ils existent, pas un espace.
data sasref; set sasref; f2=translate(f1,' ','000102030405060708090A'x); run;
Lectures complémentaires :
- 9 points autour de la notion d’octet : la section 6 traite des ASCII
- Choisir ses couleurs sous SAS
- La concaténation : 4 fonctions SAS 9
Annexe :
Reproduire le fichier Excel : Dans Word, tapez le texte en ajoutant un passage à la ligne. Copiez ensuite ce texte dans au niveau de la base fonction (fx).
Importer le fichier Excel dans SAS :
proc import file='C:/sasref/hexa.xls' out=sasref replace; getnames=no; run;
Merci pour ce post.
Il serait également interessant de montrer comment insérer un caractère spécial avec les codes ascci associés.
Par exemple:
data caractère;
Col= »ceci est un caractère spécial » || ‘A3’x || » fin »;
run;
[…] Enlever certains caractères spéciaux avec la fonction TRANSLATE […]
[…] Enlever certains caractères spéciaux avec la fonction TRANSLATE […]