IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macro Discussion :

Remplacer des ', des -, des / dans une variable par des _


Sujet :

Macro

  1. #1
    Membre du Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Février 2009
    Messages : 81
    Points : 42
    Points
    42
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

  2. #2
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    bonjour,

    Tu peux utiliser la proc translate

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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;

  3. #3
    Membre du Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Février 2009
    Messages : 81
    Points : 42
    Points
    42
    Par défaut
    hum... si j'ai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chaine = "musi'd'ambiance               "
    ça me donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chaine = "musi_d_ambiance_________"
    pas génial...

  4. #4
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    avec lka fonction compbl ca devrait fonctionner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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;

  5. #5
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    Tu as demandé de rempler les espaces par des '_'.
    Je souhaite avoir ceci (remplacement des espaces, tirets, apostrophe par _ ) :

  6. #6
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    Citation Envoyé par Manoutz Voir le message
    avec lka fonction compbl ca devrait fonctionner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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!!!

  7. #7
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    tu peux enlever le dernier translate
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    chaine_modif=translate(compbl(chaine)_modif,'_'," ");

  8. #8
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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;

  9. #9
    Membre du Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Février 2009
    Messages : 81
    Points : 42
    Points
    42
    Par défaut
    désolé cela ne marche pas... en tout, ce n'est pas que j'aimerais avoir

    je passe de

    Polars / SF
    à

    Polars_/_SF_

  10. #10
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    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

  11. #11
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    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?

  12. #12
    Membre du Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Février 2009
    Messages : 81
    Points : 42
    Points
    42
    Par défaut
    Alors, pour préciser...

    Voilà ce que j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  13. #13
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    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)

  14. #14
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    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

  15. #15
    Membre du Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Février 2009
    Messages : 81
    Points : 42
    Points
    42
    Par défaut
    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...

  16. #16
    Membre chevronné
    Homme Profil pro
    Biostatisticien
    Inscrit en
    Juin 2009
    Messages
    1 206
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Biostatisticien
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 206
    Points : 1 868
    Points
    1 868
    Par défaut
    @megamind:

    tu es sur ou c'est juste une impression personnelle?

  17. #17
    Membre du Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Février 2009
    Messages : 81
    Points : 42
    Points
    42
    Par défaut
    Je pars de ça :
    NOM
    Hard Rock
    Histoire / Actualités
    Humour-Théatre
    Jazz
    Jeunesse
    Jeux Mac
    Jeux Nintendo WII-DS
    J'ai essayé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 :

    Histoire___Actualités
    en fait, en NOM4

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

    Histoire___Actualités
    alors que je voudrais

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

    Hard_Rock
    Histoire_Actualités
    Humour_Théatre
    Jazz
    Jeunesse
    Jeux_Mac
    Jeux_Nintendo_WII_DS

  18. #18
    Membre émérite

    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mars 2005
    Messages
    1 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 364
    Points : 2 329
    Points
    2 329
    Par défaut
    ça se complique

  19. #19
    Membre du Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA

    Informations forums :
    Inscription : Février 2009
    Messages : 81
    Points : 42
    Points
    42
    Par défaut
    hé ^^ c'est pour ça que je suis ici ! ^^

  20. #20
    Membre expérimenté
    Avatar de MEGAMIND2
    Homme Profil pro
    Paris
    Inscrit en
    Janvier 2011
    Messages
    1 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Paris

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 029
    Points : 1 489
    Points
    1 489
    Par défaut
    Citation Envoyé par bahraoui Voir le message
    ça se complique

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 18
    Dernier message: 28/02/2013, 16h59
  2. Réponses: 26
    Dernier message: 20/06/2010, 18h24
  3. [XL-2007] Mettre des fonctions excel dans une variable
    Par EmmanuelleC dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 24/08/2009, 14h24
  4. Réponses: 0
    Dernier message: 31/07/2009, 02h32
  5. faire saisir des informations différentes dans une variable for
    Par zoozbiro dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 09/11/2008, 21h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo