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.
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;
 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.
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;

  BaseAMATCHCODE : A BaseBMATCHCODE : B 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 :
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;


Avec une sensibilité de 95%, la fonction DQMATHCH a permis de rapprocher les noms/prénoms suivants :   C Avec une sensibilité de 50%, la fonction DQMATHCH a permis de rapprocher les noms/prénoms suivants : D  

Nicolas Housset

Passionné d'informatique, je suis Consultant et expert technique SAS VIYA, également co-fondateur de la société Flexcelite. Spécialisé dans les technologies SAS (Viya, 9.4) et les infrastructures associées (Linux, Hadoop, Azure), ce blog est mon espace pour partager mes mémos techniques et retours d'expérience.