Comment rapprocher des données avec la fonction DQMATCH ?
La fonction DQMATCH (disponible avec SAS® Data Quality Server ) permet de rapprocher les données de deux tables différentes. Cette fonction permet de créer un MATCHCODE pour chacune des valeurs. En comparant ensuite deux MATCHCODES, il est possible de savoir si deux données sont similaires.
’exemple ci-dessous permet de comprendre le fonctionnement de cette fonction et de la mettre en œuvre. Attention, pour cet exemple, veillez à utiliser une Quality Knowledge Base (QKB) française (option DQLOCALE=(FRFRA)).
Créons d’abord deux tables contenant des noms et prénoms à rapprocher. Dans cette exemple, nous allons essayer de trouver dans la table baseB les noms - prénoms se rapprochant le plus de nicolas housset.
Créons, pour l’ensemble de ces noms/prénoms, les MATCHCODES associés. C’est maintenant que nous utilisons la fonction DQMATCH. Avec cette fonction nous allons créer deux nouvelles tables enregistrant chaque MATCHCODE.
BaseAMATCHCODE :
BaseBMATCHCODE :
Note : Plus la sensibilité est importante (95 % ou 50 %), plus l’algorithme prend en compte de caractères et de syllabes phonétiques.
Enfin, exécutons une PROC SQL afin de créer deux tables de correspondances :
Avec une sensibilité de 95%, la fonction DQMATHCH a permis de rapprocher les noms/prénoms suivants :
Avec une sensibilité de 50%, la fonction DQMATHCH a permis de rapprocher les noms/prénoms suivants :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
data baseA; length prenom nom $50.; input prenom $ nom $; datalines; nicolas housset ; run; data baseB; length prenom nom $50.; input prenom $ nom $; datalines; nicolas housset mickael housset nicolas houssey nicole housset nicolas houzet nicola houssai nicolas houssai ; run; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
data BaseAMATHCODE; set baseA; length match95 match50 $50.; prenom_nom=compbl(upcase(prenom)||upcase(nom)); match95=dqmatch(prenom_nom, 'Name', 95); match50=dqmatch(prenom_nom, 'Name', 50); run; data BaseBMATHCODE; set baseB; length match95 match50 $50.; prenom_nom=compbl(upcase(prenom)||upcase(nom)); match95=dqmatch(prenom_nom, 'Name', 95); match50=dqmatch(prenom_nom, 'Name', 50); run; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
proc sql; create table Rappro95 as select a.prenom_nom as nomA,a.match95 as match95A, b.prenom_nom as nomB,b.match95 as match95B from BaseAMATHCODE a inner join BaseBMATHCODE b on (b.match95=a.match95) ;quit; proc sql; create table Rappro50 as select a.prenom_nom as nomA,a.match50 as match50A, b.prenom_nom as nomB,b.match50 as match50B from BaseAMATHCODE a inner join BaseBMATHCODE b on (b.match50=a.match50) ;quit; |