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 :

Supprimer mot d'une chaîne de caractères


Sujet :

Macro

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Février 2013
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Février 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Supprimer mot d'une chaîne de caractères
    Bonjour,

    J'ai un souci au sein d'une macro SAS. Je souhaite supprimer un mot dans une chaîne de caractère. Le mot ainsi que la chaîne sont définis dans des macro-variables. Il faut noter que dans mon cas, le mot est forcément contenu dans la chaîne.

    Voici le code que j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    data test;
     
       suppr=upcase("&&suppr&i"); /* le mot à supprimer */
       x=upcase("&liste"); /* la chaîne de caractères dans laquelle je veux supprimer le mot*/
       f=FIND(x,suppr); /* la position du mot dans la chaîne (dernière lettre du mot)*/
     
    if f=1 then y3=substr(x,f+length(suppr));  /* s'il s'agit du 1er mot, on prend la chaîne à partir du 2e mot*/
     
    else if f>1 then do; /* s'il s'agit au moins du 2e mot*/
    y1=substr(x,1,f-1); /* partie de la chaîne avant le mot*/
    y2=substr(x,f+length(suppr)); /* partie de la chaîne après le mot */
    y3=catt(y1,y2); /* on concatène les 2 parties*/
    end;
     
    call symput("liste",y3); /* je redéfinis ma nouvelle liste*/
    run;
    Il s'avère que le programme fonctionne pour certains mots mais pas pour d'autres : alors qu'ils sont bien contenus dans la chaîne, la fonction FIND ne les trouve pas et renvoie 0. Je ne comprends pas où se trouve mon erreur.

    Merci d'avance pour votre aide !!
    Ester

  2. #2
    Membre éprouvé
    Homme Profil pro
    Statisticien/développeur BI
    Inscrit en
    Janvier 2012
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Statisticien/développeur BI
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2012
    Messages : 326
    Points : 1 142
    Points
    1 142
    Par défaut
    Bonjour,

    Tu sais qu'il existe une fonction de remplacement de mots ...
    En gardant ton code (pas testé ...):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    DATA test;
    y3=tranwrd(upcase("&liste"),upcase("&&suppr&i"),"");
    call symput("liste",y3); /* je redéfinis ma nouvelle liste*/
    run;

  3. #3
    Membre expérimenté
    Homme Profil pro
    Attaché statisticien
    Inscrit en
    Mai 2011
    Messages
    687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Attaché statisticien
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2011
    Messages : 687
    Points : 1 581
    Points
    1 581
    Par défaut
    Bonsoir,

    si tu nous montrais le code en entier et une table, et une liste avec lesquelles ça plante on pourrait t'aider plus.

    Sur le recours à une macro pour réaliser ce genre de choses cela me parait contestable, car tu recharge autant de fois ta table initiale que tu as de mots à remplacer alors que peut-être (selon ce que tu cherche vraiment à faire, c'est à dire peut etre supprimer tous les mots de ta liste de la variable de ta table) alors d'autres schéma de programmation à base de DATA/SET/POINT ou de table de hashage (méthode HITER) réaliseraient cela de façon plus naturelle en chargeant une seule fois la table initiale.

    Bon courage.

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/01/2013, 11h10
  2. Réponses: 0
    Dernier message: 31/10/2010, 17h54
  3. Colorer un mot dans une chaîne de caractéres
    Par eagle83 dans le forum Langage
    Réponses: 8
    Dernier message: 07/08/2009, 15h26
  4. Réponses: 2
    Dernier message: 09/04/2008, 21h03

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