entityRes

match

Descripción

La acción match realiza la coincidencia de datos para la gestión de entidades. Agrupa las filas de datos de entrada en clústeres basados en reglas de coincidencia definidas por el usuario. Esta acción es fundamental en los procesos de resolución de entidades para identificar y consolidar registros duplicados o relacionados.

proc cas; entityRes.match / algorithm="AUTO" | "DISTRIBUTED" | "SINGLE", clusterId="string", clusterIdLabel="string", clusterIdType="CHAR" | "DOUBLE" | "INT", columns={"variable-name-1" <, "variable-name-2", ...>}, doNotCluster="string", emptyStringIsNull=TRUE | FALSE, inTable={caslib="string", name="table-name", ...}, matchRules={{rule={{columns={"string-1" <, "string-2", ...>}}, ...}}, nThreads=integer, nullValuesMatch=TRUE | FALSE, outTable={caslib="string", name="table-name", ...}; run;
Parámetros
ParámetroDescripción
algorithmEspecifica el algoritmo a utilizar para el proceso de coincidencia. 'AUTO' permite a CAS seleccionar el mejor algoritmo. 'DISTRIBUTED' utiliza un enfoque paralelizado para grandes volúmenes de datos. 'SINGLE' procesa los datos en un solo hilo.
clusterIdEspecifica el nombre de la columna en la tabla de salida que contendrá los identificadores de clúster generados.
clusterIdLabelEspecifica la etiqueta para la columna de identificadores de clúster en la tabla de salida.
clusterIdTypeEspecifica el tipo de datos para la columna de identificadores de clúster ('CHAR', 'DOUBLE', 'INT').
columnsEspecifica los nombres de las columnas de la tabla de entrada para pasar a la tabla de salida. Si no se especifica, todas las columnas de entrada se incluyen.
doNotClusterEspecifica el nombre de una columna booleana en la tabla de entrada. Si el valor de una fila es 'true' o '1', esa fila se colocará en su propio clúster individual.
emptyStringIsNullEspecifica si los valores de cadena vacía deben ser tratados como valores NULOS durante la coincidencia (ver también el parámetro nullValuesMatch).
inTableEspecifica la tabla de datos de entrada que se va a procesar para la resolución de entidades.
matchRulesDefine las reglas para hacer coincidir las filas. Cada regla especifica un conjunto de columnas que deben tener valores idénticos para que las filas se consideren una coincidencia.
nThreadsEspecifica el número de hilos a utilizar para el procesamiento. Un valor de 0 indica usar el valor predeterminado del sistema en cada trabajador.
nullValuesMatchEspecifica si las filas con valores NULOS en las columnas de la regla de coincidencia deben agruparse juntas.
outTableEspecifica la tabla de datos de salida donde se escribirán las columnas de paso y los ID de clúster generados.
Creación de Datos de Ejemplo

Este paso crea una tabla CAS en memoria llamada 'CONTACTS' que contiene datos de contacto de muestra. Estos datos se utilizarán para demostrar la funcionalidad de agrupación en clústeres de la acción `entityRes.match`.

¡Copiado!
1DATA casuser.contacts;
2 INFILE DATALINES delimiter=',';
3 LENGTH F_NAME $20 L_NAME $20 ADDRESS $50 CITY $20;
4 INPUT F_NAME $ L_NAME $ ADDRESS $ CITY $;
5 DATALINES;
6JOHN,SMITH,123 MAIN ST,ANYTOWN
7JON,SMYTHE,123 MAIN STREET,ANYTOWN
8JANE,DOE,456 OAK AVE,OTHERVILLE
9JOHN,SMITH,456 OAK AVENUE,OTHERVILLE
10SUE,JONES,789 PINE LN,ANYTOWN
11SUSAN,JONES,789 PINE LANE,ANYTOWN
12;
13RUN;

Ejemplos

Este ejemplo agrupa los registros de la tabla 'CONTACTS' en clústeres donde el nombre y el apellido son idénticos. Es una regla de coincidencia simple y directa.

Código SAS® / CAS Código en espera de validación por la comunidad
¡Copiado!
1PROC CAS;
2 entityRes.match /
3 inTable={name='CONTACTS'},
4 matchRules={{rule={columns={'F_NAME', 'L_NAME'}}}},
5 clusterId='ClusterID_Simple',
6 outTable={name='CONTACTS_MATCHED_SIMPLE', replace=true};
7RUN;
8QUIT;
Resultado :
Se crea una tabla de salida 'CONTACTS_MATCHED_SIMPLE'. Los registros con el mismo F_NAME y L_NAME (por ejemplo, 'JOHN', 'SMITH') tendrán el mismo valor en la columna 'ClusterID_Simple'.

Este ejemplo demuestra una coincidencia más compleja utilizando múltiples reglas. Primero, intenta agrupar por una coincidencia exacta de 'F_NAME', 'L_NAME', 'ADDRESS' y 'CITY'. Luego, como una segunda regla, agrupa los registros restantes que coinciden solo en 'ADDRESS' y 'CITY'. Esto permite una agrupación más flexible.

Código SAS® / CAS Código en espera de validación por la comunidad
¡Copiado!
1PROC CAS;
2 entityRes.match /
3 inTable={name='CONTACTS'},
4 matchRules={
5 {rule={columns={'F_NAME', 'L_NAME', 'ADDRESS', 'CITY'}}},
6 {rule={columns={'ADDRESS', 'CITY'}}}
7 },
8 clusterId='ClusterID_Multi',
9 columns={'F_NAME', 'L_NAME', 'ADDRESS'},
10 outTable={name='CONTACTS_MATCHED_MULTI', replace=true};
11RUN;
12QUIT;
Resultado :
Se genera la tabla 'CONTACTS_MATCHED_MULTI'. Los registros que comparten exactamente los cuatro campos tendrán un ID de clúster. Además, los registros que solo comparten 'ADDRESS' y 'CITY' también se agruparán, recibiendo un ID de clúster diferente, mostrando la aplicación secuencial de las reglas.

Este ejemplo realiza una coincidencia por 'F_NAME' y 'L_NAME', pero explícitamente evita que los valores NULOS formen un clúster. Las filas donde 'F_NAME' o 'L_NAME' es NULO no se agruparán con otras filas NULAS.

Código SAS® / CAS Código en espera de validación por la comunidad
¡Copiado!
1PROC CAS;
2 entityRes.match /
3 inTable={name='CONTACTS'},
4 matchRules={{rule={columns={'F_NAME', 'L_NAME'}}}},
5 nullValuesMatch=FALSE,
6 clusterId='ClusterID_NoNull',
7 outTable={name='CONTACTS_MATCHED_NONULL', replace=true};
8RUN;
9QUIT;
Resultado :
La tabla de salida 'CONTACTS_MATCHED_NONULL' mostrará que los registros con valores NULOS en 'F_NAME' o 'L_NAME' reciben ID de clúster únicos y no se agrupan, a diferencia de los registros con valores idénticos no nulos.

FAQ

¿Qué es la acción `entityRes.match`?
¿Cuáles son los parámetros de entrada requeridos para esta acción?
¿Cómo se especifica la lógica de coincidencia?
¿Cuál es el propósito del parámetro `clusterId`?
¿Puedo evitar que ciertas filas se agrupen en clústeres?
¿Cómo se gestionan los valores nulos o vacíos durante la coincidencia?
¿Qué algoritmos se pueden utilizar para el proceso de coincidencia?