Précédent   Forum du club des développeurs et IT Pro > 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
 
Outils de la discussion
Publicité
'
Vieux 25/02/2013, 16h03   #1
esterd
Invité de passage
 
Inscription : février 2013
Messages : 1
Détails du profil
Informations forums :
Inscription : février 2013
Messages : 1
Points : 0
Points : 0
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 :
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
esterd est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2013, 17h01   #2
edward carnby
Membre éprouvé
 
Homme Ludovic Le Breton
Statisticien/développeur BI
Inscription : janvier 2012
Messages : 177
Détails du profil
Informations personnelles :
Nom : Homme Ludovic Le Breton
Âge : 38
Localisation : France, Oise (Picardie)

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

Informations forums :
Inscription : janvier 2012
Messages : 177
Points : 464
Points : 464
Bonjour,

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

Code :
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;
edward carnby est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/02/2013, 18h37   #3
jerome_pdv2
Membre chevronné
 
Homme
statisticien
Inscription : mai 2011
Messages : 399
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 : 399
Points : 722
Points : 722
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.
__________________
[...] Le SASSAGE s'il existe, a pour but de purifier les différentes semoules pour une meilleur efficacité de la mouture (par aspiration et tamisage) [...]
jerome_pdv2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 12h43.


 
 
 
 
Partenaires

Hébergement Web