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.
| Parámetro | Descripción |
|---|---|
| algorithm | Especifica 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. |
| clusterId | Especifica el nombre de la columna en la tabla de salida que contendrá los identificadores de clúster generados. |
| clusterIdLabel | Especifica la etiqueta para la columna de identificadores de clúster en la tabla de salida. |
| clusterIdType | Especifica el tipo de datos para la columna de identificadores de clúster ('CHAR', 'DOUBLE', 'INT'). |
| columns | Especifica 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. |
| doNotCluster | Especifica 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. |
| emptyStringIsNull | Especifica si los valores de cadena vacía deben ser tratados como valores NULOS durante la coincidencia (ver también el parámetro nullValuesMatch). |
| inTable | Especifica la tabla de datos de entrada que se va a procesar para la resolución de entidades. |
| matchRules | Define 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. |
| nThreads | Especifica el número de hilos a utilizar para el procesamiento. Un valor de 0 indica usar el valor predeterminado del sistema en cada trabajador. |
| nullValuesMatch | Especifica si las filas con valores NULOS en las columnas de la regla de coincidencia deben agruparse juntas. |
| outTable | Especifica la tabla de datos de salida donde se escribirán las columnas de paso y los ID de clúster generados. |
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`.
| 1 | DATA 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; |
| 6 | JOHN,SMITH,123 MAIN ST,ANYTOWN |
| 7 | JON,SMYTHE,123 MAIN STREET,ANYTOWN |
| 8 | JANE,DOE,456 OAK AVE,OTHERVILLE |
| 9 | JOHN,SMITH,456 OAK AVENUE,OTHERVILLE |
| 10 | SUE,JONES,789 PINE LN,ANYTOWN |
| 11 | SUSAN,JONES,789 PINE LANE,ANYTOWN |
| 12 | ; |
| 13 | RUN; |
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.
| 1 | PROC 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}; |
| 7 | RUN; |
| 8 | QUIT; |
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.
| 1 | PROC 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}; |
| 11 | RUN; |
| 12 | QUIT; |
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.
| 1 | PROC 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}; |
| 8 | RUN; |
| 9 | QUIT; |