Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > SAS > Macro
Macro Forum d'entraide sur le langage Macro de SAS
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 18/03/2011, 12h50   #1
Invité régulier
 
Homme Xavier
Chargé d'Etudes Statistiques
Inscription : février 2009
Messages : 39
Détails du profil
Informations personnelles :
Nom : Homme Xavier
Localisation : France

Informations professionnelles :
Activité : Chargé d'Etudes Statistiques

Informations forums :
Inscription : février 2009
Messages : 39
Points : 7
Points : 7
Par défaut Remplacer des ', des -, des / dans une variable par des _

Bonjour,

J'ai une variable alphanumérique avec des charactères "-", "'" (apostrophe), "/"... je souhaite les remplacer par "_".

Exemple (table avec la variable NOM):
NOM :
Psychologie-Psychanalyse
Musique d'ambiance



Je souhaite avoir ceci (remplacement des espaces, tirets, apostrophe par _ ) :
NOM :
Psychologie_Psychanalyse
Musique_d_ambiance

L'idéal serait de le faire via une macro... en cherchant sur ce forum, j'ai trouvé quelque chose qui se rapproche de ce que je veux.. mais je ne sais pas comment le modifier pour trouver ma solution :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
%LET liste="- ' /";
 
%MACRO CONVERSION;
DATA  Tab_Out;
	SET Tab_In;
	%DO i=1 %TO 3;
		%LET liste&i=%SCAN(&liste.,&i.,' ');/* Scan la liste &liste.*/
		nom2=tranwrd(nom,"&&liste&i.",'_');/* remplace du alpha-numérique par un _*/
	%END;
RUN;
%MEND CONVERSION;
 
%CONVERSION;
Merci par avance de votre aide !
zellinho est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 13h31   #2
Membre Expert
 
Inscription : mars 2005
Messages : 1 010
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 010
Points : 1 258
Points : 1 258
Envoyer un message via Yahoo à bahraoui
bonjour,

Tu peux utiliser la proc translate

Code :
1
2
3
4
5
6
7
8
9
10
 
 
DATA test;
chaine="/e-/-lk' j";
chaine_modif=translate(chaine,'_',"'");
chaine_modif=translate(chaine_modif,'_',"/");
chaine_modif=translate(chaine_modif,'_',"-");
chaine_modif=translate(chaine_modif,'_'," ");
run;
proc print; run;
__________________
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 00
Vieux 18/03/2011, 13h41   #3
Invité régulier
 
Homme Xavier
Chargé d'Etudes Statistiques
Inscription : février 2009
Messages : 39
Détails du profil
Informations personnelles :
Nom : Homme Xavier
Localisation : France

Informations professionnelles :
Activité : Chargé d'Etudes Statistiques

Informations forums :
Inscription : février 2009
Messages : 39
Points : 7
Points : 7
hum... si j'ai

Code :
chaine = "musi'd'ambiance               "
ça me donne

Code :
chaine = "musi_d_ambiance_________"
pas génial...
zellinho est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 13h43   #4
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
avec lka fonction compbl ca devrait fonctionner

Code :
1
2
3
4
5
6
7
8
DATA test;
chaine="/e-/-lk' j";
chaine_modif=translate(compbl(chaine),'_',"'");
chaine_modif=translate(compbl(chaine)_modif,'_',"/");
chaine_modif=translate(compbl(chaine)_modif,'_',"-");
chaine_modif=translate(compbl(chaine)_modif,'_'," ");
run;
proc print; run;
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 13h45   #5
Membre Expert
 
Inscription : mars 2005
Messages : 1 010
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 010
Points : 1 258
Points : 1 258
Envoyer un message via Yahoo à bahraoui
Tu as demandé de rempler les espaces par des '_'.
Citation:
Je souhaite avoir ceci (remplacement des espaces, tirets, apostrophe par _ ) :
__________________
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 00
Vieux 18/03/2011, 13h48   #6
Membre Expert
 
Inscription : mars 2005
Messages : 1 010
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 010
Points : 1 258
Points : 1 258
Envoyer un message via Yahoo à bahraoui
Citation:
Envoyé par Manoutz Voir le message
avec lka fonction compbl ca devrait fonctionner

Code :
1
2
3
4
5
6
7
8
DATA test;
chaine="/e-/-lk' j";
chaine_modif=translate(compbl(chaine),'_',"'");
chaine_modif=translate(compbl(chaine)_modif,'_',"/");
chaine_modif=translate(compbl(chaine)_modif,'_',"-");
chaine_modif=translate(compbl(chaine)_modif,'_'," ");
run;
proc print; run;
la fonction compbl remplace plusieurs blancs par un seul.
il faudrait peut être préciser les blancs qu'il faut remplacer!!!
__________________
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 00
Vieux 18/03/2011, 13h50   #7
Membre Expert
 
Inscription : mars 2005
Messages : 1 010
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 010
Points : 1 258
Points : 1 258
Envoyer un message via Yahoo à bahraoui
tu peux enlever le dernier translate
Code :
1
2
 
chaine_modif=translate(compbl(chaine)_modif,'_'," ");
__________________
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 00
Vieux 18/03/2011, 13h54   #8
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
en mon sens ca semble qu'il s'agit de ceux situés au début et à la fin...

mais il y a peut être encore mieux avec la fonction strip. En coimbinant avec compbl ca efface tous les blans redondants ainsi que ceux situés au début et à la fin..

Code :
1
2
3
4
5
6
7
8
DATA test;
chaine="/e-/-lk' j";
chaine_modif=translate(strip(compbl(chaine)),'_',"'");
chaine_modif=translate(strip(compbl(chaine))_modif,'_',"/");
chaine_modif=translate(strip(compbl(chaine))_modif,'_',"-");
chaine_modif=translate(strip(compbl(chaine))_modif,'_'," ");
run;
proc print; run;
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 13h54   #9
Invité régulier
 
Homme Xavier
Chargé d'Etudes Statistiques
Inscription : février 2009
Messages : 39
Détails du profil
Informations personnelles :
Nom : Homme Xavier
Localisation : France

Informations professionnelles :
Activité : Chargé d'Etudes Statistiques

Informations forums :
Inscription : février 2009
Messages : 39
Points : 7
Points : 7
désolé cela ne marche pas... en tout, ce n'est pas que j'aimerais avoir

je passe de

Citation:
Polars / SF
à

Citation:
Polars_/_SF_
zellinho est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 13h56   #10
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
Il faut remplacer les / ou pas? pas très clair tout ca ....

Merci de reformuler précisément ta demande

Au fait, à propos de strip... Cette fonction n'est valable qu'à partir de sas 9.1
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 13h58   #11
Membre Expert
 
Inscription : mars 2005
Messages : 1 010
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 010
Points : 1 258
Points : 1 258
Envoyer un message via Yahoo à bahraoui
Citation:
Envoyé par zellinho Voir le message
désolé cela ne marche pas... en tout, ce n'est pas que j'aimerais avoir

je passe de



à
Tu veux quoi comme résultat pour ce cas?
__________________
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 00
Vieux 18/03/2011, 14h00   #12
Invité régulier
 
Homme Xavier
Chargé d'Etudes Statistiques
Inscription : février 2009
Messages : 39
Détails du profil
Informations personnelles :
Nom : Homme Xavier
Localisation : France

Informations professionnelles :
Activité : Chargé d'Etudes Statistiques

Informations forums :
Inscription : février 2009
Messages : 39
Points : 7
Points : 7
Alors, pour préciser...

Voilà ce que j'ai :

Code :
1
2
3
4
5
6
7
Hard Rock
Histoire / Actualités
Humour-Théatre
Jazz
Jeunesse
Jeux Mac
Jeux Nintendo WII-DS
et je voudrais avoir :

Code :
1
2
3
4
5
6
7
Hard_Rock
Histoire_Actualités
Humour_Théatre
Jazz
Jeunesse
Jeux_Mac
Jeux_Nintendo_WII_DS
Les blancs qui sont situés après le dernier caractère ne doivent pas être pris en compte.

Je suis en 9.2, donc c'est bon pour le strip.
zellinho est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 14h04   #13
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Citation:
Envoyé par Manoutz Voir le message
Il faut remplacer les / ou pas? pas très clair tout ca ....

Merci de reformuler précisément ta demande

Au fait, à propos de strip... Cette fonction n'est valable qu'à partir de sas 9.1

J'ai l'impréssion qu'il ne supprime pas les blancs à droite (j'ai la 9.1 aussi)
MEGAMIND2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 14h05   #14
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
je suppose que tu as fait une erreur pour "hard rock", tu veux obtenir "hard_rock"...

etant donné le cas "Histoire / Actualités"
ou tu as caractères clés successiveent, je te propose:

1/de transformer tous les caratères spéciaux, hormis en espaces, via tranwrd
2/virer les blancs au début et à la fin, ainsi que ceux qui sont redondants, via un strip/compbl
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 14h06   #15
Invité régulier
 
Homme Xavier
Chargé d'Etudes Statistiques
Inscription : février 2009
Messages : 39
Détails du profil
Informations personnelles :
Nom : Homme Xavier
Localisation : France

Informations professionnelles :
Activité : Chargé d'Etudes Statistiques

Informations forums :
Inscription : février 2009
Messages : 39
Points : 7
Points : 7
Citation:
Envoyé par Manoutz Voir le message
je suppose que tu as fait une erreur pour "hard rock", tu veux obtenir "hard_rock"...
oui tout à fait !

Citation:
Envoyé par Manoutz Voir le message
etant donné le cas "Histoire / Actualités"
ou tu as caractères clés successiveent, je te propose:

1/de transformer tous les caratères spéciaux, hormis en espaces, via tranwrd
2/virer les blancs au début et à la fin, ainsi que ceux qui sont redondants, via un strip/compbl
je vais essayer...
zellinho est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 14h09   #16
Membre Expert
 
Homme
Biostatisticien
Inscription : juin 2009
Messages : 1 143
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Irlande

Informations professionnelles :
Activité : Biostatisticien
Secteur : Industrie Pharmaceutique

Informations forums :
Inscription : juin 2009
Messages : 1 143
Points : 1 760
Points : 1 760
@megamind:

tu es sur ou c'est juste une impression personnelle?
Manoutz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 14h15   #17
Invité régulier
 
Homme Xavier
Chargé d'Etudes Statistiques
Inscription : février 2009
Messages : 39
Détails du profil
Informations personnelles :
Nom : Homme Xavier
Localisation : France

Informations professionnelles :
Activité : Chargé d'Etudes Statistiques

Informations forums :
Inscription : février 2009
Messages : 39
Points : 7
Points : 7
Je pars de ça :
NOM
Citation:
Hard Rock
Histoire / Actualités
Humour-Théatre
Jazz
Jeunesse
Jeux Mac
Jeux Nintendo WII-DS
J'ai essayé ça :

Code :
1
2
3
4
5
6
7
DATA  VAR_ARBO2 ;
	SET VAR_ARBO;
		nom2=translate(nom,'_',"'");
		nom3=translate(nom2,'_','-');
		nom4=translate(nom3,'_','/');
		nom5=translate(strip(compbl(nom4)),'_',' ');
RUN;
malheureusement ... cela me donne ça :

Citation:
Histoire___Actualités
en fait, en NOM4

j'ai ça :
Citation:
Histoire _ Actualités
et ensuite en NOM5 j'arrive à

Citation:
Histoire___Actualités
alors que je voudrais

Citation:
Histoire_Actualités
sinon, pour les autres j'ai bien ce que je veux à savoir :

Citation:
Hard_Rock
Histoire_Actualités
Humour_Théatre
Jazz
Jeunesse
Jeux_Mac
Jeux_Nintendo_WII_DS
zellinho est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 14h19   #18
Membre Expert
 
Inscription : mars 2005
Messages : 1 010
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 1 010
Points : 1 258
Points : 1 258
Envoyer un message via Yahoo à bahraoui
ça se complique
__________________
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 00
Vieux 18/03/2011, 14h19   #19
Invité régulier
 
Homme Xavier
Chargé d'Etudes Statistiques
Inscription : février 2009
Messages : 39
Détails du profil
Informations personnelles :
Nom : Homme Xavier
Localisation : France

Informations professionnelles :
Activité : Chargé d'Etudes Statistiques

Informations forums :
Inscription : février 2009
Messages : 39
Points : 7
Points : 7
hé ^^ c'est pour ça que je suis ici ! ^^
zellinho est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 14h21   #20
Membre Expert
 
Avatar de MEGAMIND2
 
Homme Brice Beare
Paris
Inscription : janvier 2011
Messages : 956
Détails du profil
Informations personnelles :
Nom : Homme Brice Beare
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Paris

Informations forums :
Inscription : janvier 2011
Messages : 956
Points : 1 366
Points : 1 366
Citation:
Envoyé par bahraoui Voir le message
ça se complique
MEGAMIND2 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 22h27.


 
 
 
 
Partenaires

Hébergement Web