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 14/05/2011, 17h33   #1
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
Par défaut Exit les caractères spéciaux

Bonjour,

J'ai toujours un certain nombre de variables "polluées" par des caractères spéciaux...

J'en traite certains préalablement (majuscules accentuées par exemple) au cas par cas.

Ensuite il me reste toujours un certain nombre de caractères "scories" qui ne sont ni des lettres majuscules non accentuées, ni des chiffres.

Ces caractères , en fin de traitement ne m'intéresse pas, et "polluent" mes variables (qui sont a priori des collection de chiffres, nombres, lettres ou mots).

Je souhaiterais les remplacer tous par un unique caractère spécial


Exemple

Code :
1
2
obs var
1     LA PETITE MAISON %% DA§NS LA PRAIRIE EPISODE #6
je voudrais que ça devienne

Code :
1
2
obs var
2     LA PETITE MAISON @@ DA@NS LA PRAIRIE EPISODE @6

Ceci y compris pour les caractères de contrôle biensûr que j'inclue dans les caractères "spéciaux"

Y a t il une solution ?

A défaut, je souhaiterais les remplacer des blancs.

Merci de votre aide.
jerome_pdv2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2011, 09h48   #2
Membre habitué
 
Sébastien Ringuedé
Inscription : janvier 2011
Messages : 61
Détails du profil
Informations personnelles :
Nom : Sébastien Ringuedé
Localisation : France, Loiret (Centre)

Informations forums :
Inscription : janvier 2011
Messages : 61
Points : 114
Points : 114
Bonjour,

pour simplement retirer ces différents caractères, il y a la fonction COMPRESS

Code :
1
2
3
4
5
6
7
 
DATA toto;
x="LA PETITE MAISON %% DA§NS LA PRAIRIE EPISODE #6";
x=compress(x,"&#§%");
run; 
 
proc print;run;
Code :
1
2
3
Obs                         x
 
 1     LA PETITE MAISON  DANS LA PRAIRIE EPISODE 6
et voilà !
z6c3po est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/05/2011, 10h20   #3
Nouveau Membre du Club
 
Homme Gaëtan
Inscription : avril 2011
Messages : 29
Détails du profil
Informations personnelles :
Nom : Homme Gaëtan
Localisation : France

Informations forums :
Inscription : avril 2011
Messages : 29
Points : 26
Points : 26
Sinon tu peux aussi résoudre ce problème avec les fonctions ANY et NOT.
Ici la fonction NOTNAME vaut 1 si la chaine de caractères n'est pas une chaine valide pour un nom de table ou de variable (caractères accentués, espaces, caractères spéciaux ...) et la fonction NOTSPACE vaut 1 si la chaine ne contient pas d'espace.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DATA tutu;
input let$80.;
cards;
LA PETITE MAISON %% DA§NS LA PRAIRIE EPISODE #6
;
run;
 
 
DATA lettres ;
SET tutu; 
do i=1 TO length(let);
	IF notname(substr(let,i,1)) = 1 AND notspace(substr(let,i,1)) = 1 then
	substr(let,i,1)='@';
end;
run;
boutchiwah est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/06/2011, 14h21   #4
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
Merci je ne connaissais pas ces fonctions.
En fait même avec ces fonctions il me restait encore des cas de caractères particuliers à traiter...j'ai donc utilisé un translate "massif" (en fait plusieurs lignes de translate) en citant tous les caractères que je voulais effacer.
jerome_pdv2 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 13h29.


 
 
 
 
Partenaires

Hébergement Web