Posts Tagged ‘ascii’

Enlever certains caractères spéciaux avec la fonction TRANSLATE
février 23, 2009Cet article est réécrit. Découvrez le sur : programmeur-pro.com
Les 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ü
- 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éciaxu 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
Cet article est réécrit. Découvrez le sur : programmeur-pro.com
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
Cet article est réécrit. Découvrez le sur : programmeur-pro.com
2. Un exemple, le symbole « Line Feed »
L’image ci-dessous présent ene 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 laf onction 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;
Cet article est réécrit. Découvrez le sur : programmeur-pro.com
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
Cet article est réécrit. Découvrez le sur : programmeur-pro.com
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;
Cet article est réécrit. Découvrez le sur : programmeur-pro.com

Faire des petits avec l’instruction OUTPUT
mars 1, 2008
Imaginez devoir créer plusieurs fois le même tableau avec des fréquences, des tests statistiques, etc. Pourquoi plusieurs fois ? Parce que chaque tableau inclus une population différente.
1. Une observation par tableau
Dans le cas le plus simple, chaque observation n’apparaît que dans un seul des tableaux à produire. Une variable identifie le tableau auquel l’observation est allouée et l’instruction BY utilise cette variable avec la procédure report ou autre.
Voici un exemple où les données sont publiées par pays dans des tableaux distincts. L’utilisation d’une valeur numérique pour le pays est optionnelle mais ajoute de la flexibilité pour trier les données.
proc format;
value cntry
1=’Chine’
2=’Malaisie’;
run;
proc report data=lab;
by cntry;
columns test cnt;
…
format cntry cntry.;
run;
2. Plusieurs tableaux pour une observation
Exemple : maintenant voici deux exemples des essais cliniques pour lesquels une observation peut servir à plusieurs tableaux.
- Construire un tableau pour la population ‘per protocol’, un pour ‘intent-to-treat’ et un pour ‘safety’ : un patient valide par protocole est aussi pour l’analyse de sûreté mais tous les patients valides pour la sûreté ne répondent pas forcément aux critères du protocole.
- créer un tableau par zone géographique : un tableau pour tous les pays couverts par l’étude clinique, un tableau par pays et un par centre dans un pays donné.
Dans ces deux cas, une observation peut être utilisée par plusieurs tableaux. La méthode précédente n’est plus suffisante. Voici la solution que je vous propose :
- 1er tableau : extraire les observations correspondant au premier tableau en utilisant une condition listant le critère de sélection si besoin.
- rendre ces observations uniques en ajoutant une nouvelle variable avec un numéro unique
- sauvegarder ces observations dans un jeu de données
- 2ème tableau : extraire les observations pour le second tableau
- donner un numéro différent à ces observations
- ajouter ces observations à celles précédemment sélectionnées
- 3ème tableau : etc.
Dans l’exemple qui suit, quatre tableaux différents sont à produits. On intercalera le code suivant entre les procédures format et report mentionnées précédemment.
data lab;
set lab;
grp=1;
output;
if cntry=’CN’ then
do;
grp=2;
output;
end;
else if cntry=’MY’ then
do;
grp=3;
output;
end;
if cntr=1 and cntry=’CN’ then
do;
grp=4;
output;
end;
run;
3. Créer plusieurs jeux de données
L’instruction OUTPUT dirige, par défaut, les données vers le jeu de données nommé dans l’instruction DATA. Parfois, il faut créer plusieurs data sets à partir à partir d’un seul jeu de données. Par exemple, on créera un data set contenant les patients inclus dans l’étude et un autre ceux exclus. Pour cela, il suffit de nommer les nouveaux jeux de données dans l’instruction DATA et de rappeler leur nom dans chaque instruction OUTPUT.
data incl excl;
set pat_lst;
if missing (randomno) then output excl;
else output incl;
run;
4. Créer une variable numérique avec des valeurs continues
En combinaison avec une boucle, l’instruction OUTPUT permet de générer des nombres. Par exemple, j’ai eu besoin de tester une macro via un data set listant toutes les valeurs ASCII imprimables. Ces valeurs ont un numéro allant de 32 à 126. La fonction BYTE retrouve la valeur ASCII avec ces numéros.
data ascii (drop=i);
do i=31 to 126;
ascii=byte(i);
output;
end;
run;
Autres lectures : vous pouvez étendre votre lecture sur l’instruction DO et DELETE. L’instruction DO dispose d’un mot-clé BY. L’instruction DELETE est, quant à elle, l’inverse de l’OUTPUT.