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 30/01/2012, 15h45   #1
Membre habitué
 
Homme Julien
Ingénieur d'études / Biostatisticien
Inscription : décembre 2009
Messages : 304
Détails du profil
Informations personnelles :
Nom : Homme Julien
Localisation : France

Informations professionnelles :
Activité : Ingénieur d'études / Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : décembre 2009
Messages : 304
Points : 101
Points : 101
Par défaut Sélectionner un caractère une seule fois

Bonjour, j'ai le tableau suivant:

Citation:
Obs var1 var2
1 _2_class2 _3_class3
2 _1_class1 _2_class2
3 _1_class1 _3_class3
J'aimerais sélectionner uniquement le premier underscore de mes deux colonnes et le supprimer, par exemple je veux que _2_class2 deviennent 2_class2... j'ai essayé pas mal de fonction comme INDEX ou encore TRANWRD mais je n'arrive pas au résultat souhaité...

En vous remerciant d'avance.
joyeux_lapin13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 15h58   #2
Membre Expert
 
Inscription : mars 2005
Messages : 1 011
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 011
Points : 1 259
Points : 1 259
Envoyer un message via Yahoo à bahraoui
Je te propose la solution suivante:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
DATA t;
format a $30.;
input a $;
cards;
1_2_class2 _3_class3
2qsdf_1_class1 _2_class2
345_1_class1 _3_class3 
;
run;
DATA t; SET t;
/*position du caractère qu'on souhaite remplacer */
posi=INDEX(a,'_');
/*Récupérer ce qui se trouve à droite et à gauche de ton caractère*/
deb=substr(a,1,posi-1);
fin=substr(a,posi+1);
/*construire une nouvelle chaine avec un autre caractère ici | */
new=compress(deb||'|'||fin);
run;
Je pense que c'est possible avec une expression régulière.
__________________
Consultez les FAQs et les anciens postes avant de poser vos questions. Merci
bahraoui est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/01/2012, 16h16   #3
Expert Confirmé
 
Avatar de olivier.decourt
 
Homme Olivier Decourt
Formateur en informatique
Inscription : avril 2008
Messages : 1 467
Détails du profil
Informations personnelles :
Nom : Homme Olivier Decourt
Âge : 34
Localisation : France

Informations professionnelles :
Activité : Formateur en informatique
Secteur : Conseil

Informations forums :
Inscription : avril 2008
Messages : 1 467
Points : 2 828
Points : 2 828
On peut aussi, via la fonction PRXCHANGE, imposer le nombre maximum de fois où le remplacement est effectué.
Code :
b = PRXCHANGE("s/_//",1,a) ;
On suppose que tu ne veux supprimer que le premier underscore. Le résultat peut être dans la variable d'origine (il suffit d'un A à gauche du égal au lieu de B).
olivier.decourt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 16h26   #4
Membre habitué
 
Homme Julien
Ingénieur d'études / Biostatisticien
Inscription : décembre 2009
Messages : 304
Détails du profil
Informations personnelles :
Nom : Homme Julien
Localisation : France

Informations professionnelles :
Activité : Ingénieur d'études / Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : décembre 2009
Messages : 304
Points : 101
Points : 101
Merci Olivier et Bahraoui, ça marche parfaitement!
joyeux_lapin13 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2012, 16h44   #5
Modérateur
 
Homme Samir SELMANE
Consultant en Business Intelligence
Inscription : février 2011
Messages : 1 012
Détails du profil
Informations personnelles :
Nom : Homme Samir SELMANE
Localisation : France

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : février 2011
Messages : 1 012
Points : 1 717
Points : 1 717
[Hello;
Il y ça aussi mais bon
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
DATA tab;
INFILE cards;
input Obs var1 : $10. var2 : $10.;
cards;
1 _2_class2 _3_class3
2 _1_class1 _2_class2
3 _1_class1 _3_class3  
 
;
run;
 
 
DATA tab1;
   SET tab;
   IF char(var1,1)='_' then var1='_'!! compress(var1,'_'); else var1=compress(var1,'_');
    var2='_'!! compress(var2,'_');
run;
t'as deux choix :
1- si l'OBS commence par un '_' --> le garder et supprimer les suivants.

2-var2 si tu veux à tout les coups que tes OBS commencent par '_' .
s_a_m 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 06h55.


 
 
 
 
Partenaires

Hébergement Web