Pages

Affichage des articles dont le libellé est mots. Afficher tous les articles
Affichage des articles dont le libellé est mots. Afficher tous les articles

Tranwrd plusieurs mots dans un macro-programme sujet

vendredi 28 mars 2014




Bonjour,

Je tente de faire plusieurs transformations à l'aide de TRANWRD, TRANSLATE....

Après des recherches je suis tombée sur ce post ici/ il semble aller dans le même sens que mon besoin.

Cependant les résultats ne correspondent pas à ce que je m'attendais.

Et chose bizarre, le programme semble " instable" un coup ca à l'air de fonctionner un coup non:aie: (je suis pas folle j'ai même pris des collègues à témoins). J'ai du mal à comprendre pourquoi ca marche pas:calim2:

Voici le programme et les données qui me servent de test avant de l'appliquer à mes 30M de lignes.

Dernier résultat en date, au niveau du %if...le scan ne garde que la dernière valeur (O...de O Malley est supprimé)


Code:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59


data test;
input nom . ;
cards;
SAINTPIERRE
SAINTE-MARIE
ÀU
DU CON
DE SOUSA
DA SOUSA
DE LA CHEVROTIERE
O MALLEY
LADUNE
DELANOY
L'heritière
O'Formidable
Normal
;
run;


%let twrd_to= 'ST';
%let twrd_from= 'SAINT';
%let twrd_from1=DA|DU|DE|DE LA|O/*|L'|O'*/;*/ /*Pour extra : ne fonction pas à cause de l'apostrophe*/;

%macro transformation;

DATA test_res;
SET test;

/*Similarité phonétique*/
Nom_S = soundex(nom);

/*Remplacer SAINT par ST*/
Nom_T1=tranwrd(nom, &twrd_from.,&twrd_to.);

/*REMPLACER les particules par rien*/

%do i=1 %TO 5; /* J'ai l'impression que le problème se situe ici*/
%let word=%scan("&twrd_from1.",&i.,"|");
IF FIND(upcase(Nom_T1),"&word.") ne 0 then do;
/* Si l'expression est trouvée alors */
Nom_T2=tranwrd(upcase(Nom_T1),"&word. "," "); /* je la remplace par rien */
end;
%end;

/*IF Nom_T2="" then Nom_T2=nom_T1;*/

/*Quid des observations qui ne nécessitent pas de transformation*/
/*Si je mets pas cette partie pourquoi les autres lignes ne sont pas alimentées ????*/

/*Supprimer ou remplacer caractères spéciaux */
Nom_T=strip(translate(compress(upcase(nom_T2), &remove.),&trans_to.,&trans_from.));

run;
%mend transformation;

%transformation;



Merci pour vos lumières.

Petit extra : pouvoir prendre en charge le L' et les O' ...dans ma variable twrd_from1...quelques petits soucis avec les apostrophes.




Toutes versions Aide - Formule ou Maccro recherche de mots sujet




Bonjour à tous,

Je recherche soit une formule, soit une maccro qui puisse me permettre de mettre en place ceci:

Dans une colonne B j'ai une liste de mot sur le secteur du voyage croisés avec des pays:

2014-03-28_10-16-44.png


Mon but serais de dire à Excel, si tu trouve dans la colonne B un des mots de la base 1 ou 2 ou 3 alors tu m'inscris le nom de pays en gras (F4 / G4 / H4). Dans le cas ou 2 mots seraient présents ex:

"voyage à paris au départ d'espagne " --> je souhaite avoir l'info suivante : France Espagne (le mot "paris" est dans la base France et le mot "espagne" est dans la base espagne).

Je connais les fonctions cherche et si mais le problème c'est que mes bases vont contenir beaucoup de termes.. et j'imagine que la formule sera très longue.. non?

Est-ce qu'à votre avis cela est réalisable?

Par avance merci de votre aide précieuse,

Bonne journée :)













Fichiers attachés








Remplacer des mots d'une chaine sujet

jeudi 27 mars 2014




Bonjour j'aimerai remplacer certains signes dans une chaine sauf à une condition.

prenons l'exemple du signe + . J'aimerai lui attribuer la classe operateur uniquement s'il n'est pas entre guillemet.

je démarre mon code avec ceci, je ne sais pas comment lui dire sauf entre guillemet.


Code:


1
2

text.replace(/+/g, "<span class='operateur'>+</span>");


Merci pour votre aide. :)