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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
|
DATA WORK.tab_adresse;
LENGTH
NO_BENF 8
client 8
Adr_lig_1 $ 30
adr_lig_2 $ 22
copos $ 6
Raison $ 13
Commentaire $ 28 ;
FORMAT
NO_BENF BEST12.
client BEST12.
Adr_lig_1 $CHAR30.
adr_lig_2 $CHAR22.
copos $CHAR6.
Raison $CHAR13.
Commentaire $CHAR28. ;
INFORMAT
NO_BENF BEST12.
client BEST12.
Adr_lig_1 $CHAR30.
adr_lig_2 $CHAR22.
copos $CHAR6.
Raison $CHAR13.
Commentaire $CHAR28. ;
INFILE DATALINES4
DLM='7F'x
MISSOVER
DSD ;
INPUT
NO_BENF : BEST32.
client : BEST32.
Adr_lig_1 : $CHAR30.
adr_lig_2 : $CHAR22.
copos : $CHAR6.
Raison : $CHAR13.
Commentaire : $CHAR28. ;
DATALINES4;
105821367121341167 2400 RUE SAINT-JEAN-BAPTISTE JONQUIERE QCG8A1X1
105821367947338550 3446 RUE DU ROI-GEORGES JONQUIERE QCG7S5T5
105843437546359759 518 RUE FAIRFIELDGREENFIELD PARK QCJ4V2A2 devrait être la même adresse
105843437759354442 518 FAIRFIELD ST GREENFIELD PARK QCJ4V2A2 devrait être la même adresse
105850010217135116 3-124 LAVERGNE VANIER ONK1L5E7
105850010259317647 187 RTE DU ROCHER-PERCE CHAMBORD QCG0W1G0
105853766746379541 253 RUE DES GRIVES SAINT-NICOLAS QCG7A3G6
105853766806370452 1204-610 BULLOCK DR MARKHAM ONL3R0G1
105857759418391166 85 RUE PAUL-ALBERT BLAINVILLE QCJ7E4H5Même adresse
105857759730305543 85 RUE PAUL-ALBERT BLAINVILLE QCJ7E4H5Même adresse
105862486563306436 201 TIPPERARYSHEDIAC NBE4P2V7
105862486638303041 1651 RUE PRINCIPALE CHAMBORD QCG0W1G0
105873228265335331 327A RUE HILAIRE BOIS-DES-FILION QCJ6Z1C9
105873228578353641 3 RUE DE LA CHATELAINE TERREBONNE QCJ6X4C4
105877039208354726 211-12590 RUE SHERBROOKE E POINTE-AUX-TREMBLES QCH1B1C9
105877039764395539 2-7920 RUE MADELEINE-HUGUENINMONTREAL QCH1L6M7
105877443309341934 202-1440 RUE ONESIME-VOYER QUEBEC QCG1Y3L1Même adresse
105877443671338223 202-1440 RUE ONESIME-VOYER QUEBEC QCG1Y3L1Même adresse
;;;;
data adressees;
set tab_adresse;
length
adresse $55.
RueNum $10.
Ruenom $40.
;
/*suppression des blancs, remplacement de blancs successifs par un seul*/
adresse = left(trim(compbl(adr_lig_1)));
/*METHODE BASIQUE D'EXTRACTION DE COMPOSANTS CARACTÈRES*/
Numero=scan(adresse,1,' '); /*OK*/
IF find(Numero,"-")>0 then do;
appartement=scan(Numero,1,'-') ; /*OK*/
numero=compress(scan(Numero,2,'-')); /*OK*/
end;
/*Extraction classique rue PAS OK veut scanner la suite et pas juste le mot suivant*/
IF find(Numero,"-")>0 then
rue=compress(scan(adresse,3, -1));
ELSE rue=compress(scan(adresse,2,-1)) ;
/*UTILISATION EXPRESSION REGULIÈRE*/
/*definition des modèles*/
if _N_ = 1 then
do;
modeleadresse = "/(\d+)[\s\w*\#]+/i";
/*PAS OK ne prend pas en compte les noms composés*/
/*modeleadresse = "/(\d+)[\s\w*\[-|s]*\w*]+/i"; */
modele_adresse = prxparse(modeleadresse);
modeleRueNum = "/(\d+)\w*/i";
/* PAS OK bug si appartement prendre numéro entre - et 1er blanc*/
/*modeleRueNum = "/(\d+)[-]?(\d+)\w i";*/
modele_RueNum = prxparse(modeleRueNum); end;
retain modele_adresse modele_RueNum;
/* modele_adresse is Rue number, nom */
call prxsubstr(modele_adresse, adresse, position, length);
if position ^= 0 then
do;
match = substr(adresse, position, length);
call prxsubstr(modele_RueNum, match, position2, length2);
if position2 ^= 0 then
do;
match2 = substr(match, position2, length2);
RueNum = match2;
Ruenom = trim(compress(substr(match, length2+1 ),','));
end;
else
do;
Ruenom = match;
end;
end;
run; |
Partager