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é)
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.
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.
Aucun commentaire:
Enregistrer un commentaire