entityRes

match

Beschreibung

Führt einen Datenabgleich (Matching) zur Entitätsauflösung durch, um Zeilen in einer Eingabetabelle zu gruppieren. Diese Aktion identifiziert und gruppiert doppelte oder verwandte Datensätze, was für die Datenbereinigung und -konsolidierung entscheidend ist.

entityRes.match <result=results> <status=rc> / 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", computedOnDemand=TRUE | FALSE, computedVars={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer}, {...}}, computedVarsProgram="string", dataSourceOptions={key-1=any-list-or-data-type-1 <, key-2=any-list-or-data-type-2, ...>}, groupBy={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer}, {...}}, groupByMode="NOSORT" | "REDISTRIBUTE", importOptions={fileType="ANY" | "AUDIO" | "AUTO" | "BASESAS" | "CSV" | "DELIMITED" | "DOCUMENT" | "DTA" | "ESP" | "EXCEL" | "FMT" | "HDAT" | "IMAGE" | "JMP" | "LASR" | "PARQUET" | "SOUND" | "SPSS" | "VIDEO" | "XLS", fileType-specific-parameters}, name="table-name", orderBy={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer}, {...}}, singlePass=TRUE | FALSE, vars={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer}, {...}}, where="where-expression", whereTable={casLib="string", dataSourceOptions={key-1=any-list-or-data-type-1 <, key-2=any-list-or-data-type-2, ...>}, importOptions={fileType="ANY" | "AUDIO" | "AUTO" | "BASESAS" | "CSV" | "DELIMITED" | "DOCUMENT" | "DTA" | "ESP" | "EXCEL" | "FMT" | "HDAT" | "IMAGE" | "JMP" | "LASR" | "PARQUET" | "SOUND" | "SPSS" | "VIDEO" | "XLS", fileType-specific-parameters}, name="table-name", vars={{format="string", formattedLength=integer, label="string", name="variable-name", nfd=integer, nfl=integer}, {...}}, where="where-expression"}}, matchRules={{rule={{columns={"string-1" <, "string-2", ...>}}, {...}}}}, {...}}, nThreads=integer, nullValuesMatch=TRUE | FALSE, outTable={caslib="string", compress=TRUE | FALSE, indexVars={"variable-name-1" <, "variable-name-2", ...>}, label="string", lifetime=64-bit-integer, maxMemSize=64-bit-integer, memoryFormat="DVR" | "INHERIT" | "STANDARD", name="table-name", promote=TRUE | FALSE, replace=TRUE | FALSE, replication=integer, tableRedistUpPolicy="DEFER" | "NOREDIST" | "REBALANCE", threadBlockSize=64-bit-integer, timeStamp="string", where={"string-1" <, "string-2", ...>}};
Einstellungen
ParameterBeschreibung
algorithmGibt den zu verwendenden Algorithmus an.
clusterIdGibt den Namen der Spalte in der Ausgabetabelle an, die die Cluster-IDs enthält.
clusterIdLabelGibt die Bezeichnung der Spalte in der Ausgabetabelle an, die die Cluster-IDs enthält.
clusterIdTypeGibt den Typ der Spalte in der Ausgabetabelle an, die die Cluster-IDs enthält.
columnsGibt die Namen der Spalten in der Eingabetabelle an, die in die Ausgabetabelle übernommen werden sollen. Wenn nicht angegeben, werden alle Eingabespalten in der Ausgabe erscheinen.
doNotClusterGibt den Namen der Spalte in der Eingabetabelle an, die das 'Do Not Cluster'-Flag (boolescher Wert) enthält. Wenn der Wert 'true' oder '1' ist, wird die Zeile in einen eigenen Cluster eingeordnet.
emptyStringIsNullGibt an, ob leere Zeichenkettenwerte als NULL-Werte behandelt werden sollen (siehe Option nullValuesMatch).
inTableGibt die Eingabedatentabelle an.
matchRulesGibt die Namen der Spalten an, die für den Abgleich von Zeilen und deren Gruppierung in Cluster verwendet werden sollen.
nThreadsGibt die Anzahl der zu verwendenden Threads an (0 = Systemstandard auf jedem Worker verwenden).
nullValuesMatchGibt an, ob NULL-Werte zusammen gruppiert werden sollen.
outTableGibt die Ausgabedatentabelle an, in die die durchgereichten Spalten und die Cluster-IDs geschrieben werden sollen.
Erstellung von Beispieldaten

Dieser Code erstellt eine einfache CAS-Tabelle namens 'identities' mit potenziell doppelten Kundendatensätzen, die für den Abgleich verwendet werden können.

Kopiert!
1DATA casuser.identities;
2 INFILE DATALINES delimiter=',';
3 LENGTH name $ 20 address $ 30 email $ 30;
4 INPUT id name $ address $ email $;
5 DATALINES;
61, John Smith, 123 Main St, j.smith@example.com
72, Jon Smith, 123 Main Street, j.smith@example.com
83, Mary Jones, 456 Oak Ave, mary.jones@example.com
94, John Smith, 789 Pine Ln, jsmith@work.com
105, Mary Jones, 456 Oak Ave, mary.jones@example.com
11;
12RUN;

Beispiele

Dieses Beispiel gruppiert Datensätze, bei denen der Wert in der Spalte 'email' exakt identisch ist. Es ist die einfachste Form des Matchings.

SAS® / CAS-Code Code wartet auf Validierung durch die Community
Kopiert!
1PROC CAS;
2 entityRes.match /
3 inTable={name='identities' caslib='casuser'},
4 matchRules={{rule={{columns={'email'}}}}},
5 clusterId='email_cluster_id',
6 outTable={name='matched_simple', caslib='casuser', replace=true};
7RUN;
8QUIT;
Ergebnis :
Die Ausgabetabelle 'matched_simple' enthält die Originaldaten sowie eine neue Spalte 'email_cluster_id'. Datensätze mit der gleichen E-Mail-Adresse (z.B. Zeilen 1 und 2, und Zeilen 3 und 5) erhalten dieselbe Cluster-ID.

Dieses Beispiel zeigt ein mehrstufiges Matching. Zuerst wird eine exakte Übereinstimmung für 'email' versucht. Anschließend wird eine zweite Regel angewendet, die eine exakte Übereinstimmung für 'name' UND 'address' erfordert. Dies ermöglicht die Gruppierung von Datensätzen, die entweder dieselbe E-Mail-Adresse ODER dieselbe Kombination aus Name und Adresse haben.

SAS® / CAS-Code Code wartet auf Validierung durch die Community
Kopiert!
1PROC CAS;
2 entityRes.match /
3 inTable={name='identities' caslib='casuser'},
4 matchRules={{rule={{columns={'email'}}}},
5 {rule={{columns={'name', 'address'}}}}},
6 clusterId='multi_rule_cluster_id',
7 columns={'id', 'name', 'address', 'email'},
8 outTable={name='matched_detailed', caslib='casuser', replace=true};
9RUN;
10QUIT;
Ergebnis :
Die Ausgabetabelle 'matched_detailed' wird erstellt. Sie enthält eine Cluster-ID-Spalte 'multi_rule_cluster_id'. Datensätze werden in denselben Cluster gruppiert, wenn sie entweder in der Spalte 'email' übereinstimmen (wie Zeilen 1 und 2) ODER wenn sie sowohl in der Spalte 'name' als auch in der Spalte 'address' übereinstimmen (wie die Datensätze 3 und 5). Dies führt zu einer umfassenderen Gruppierung als im einfachen Beispiel.

FAQ

Was ist die Aktion `entityres.match`?
Wozu dient der Parameter `algorithm`?
Was ist der Zweck des Parameters `clusterId`?
Wie kann ich Spalten von der Eingabe- zur Ausgabetabelle durchreichen?
Was bewirkt der Parameter `nullValuesMatch`?
Wie kann man verhindern, dass bestimmte Zeilen geclustert werden?