simple

compare

Description

Compare deux tables en calculant l'index et la fréquence de chaque groupe, la fréquence cumulée, et l'index de chaque enregistrement au sein de son groupe.

simple.compare { attributes={{name="variable-name"}, ...}, casOut={caslib="string", compress=TRUE|FALSE, indexVars={"variable-name-1", ...}, 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", ...}}, casOut2={caslib="string", compress=TRUE|FALSE, indexVars={"variable-name-1", ...}, 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", ...}}, copyVars={"variable-name-1", ...}, cumFreq2Name="variable-name", cumFreqName="variable-name", details=TRUE|FALSE, divider="string", freqOut={caslib="string", compress=TRUE|FALSE, indexVars={"variable-name-1", ...}, 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", ...}}, frequency2Name="variable-name", frequencyName="variable-name", generatedColumns={"ALL", "CUMFREQ", "F", "FREQUENCY", "GROUPID", "NONE", "POSITION"}, groupID2Name="variable-name", groupIDBothName="variable-name", groupIDName="variable-name", includeDuplicates={"CASOUT", "CASOUT2", "FREQOUT"}, includeMissing=TRUE|FALSE, inputRegEx={"string-1", ...}, inputs={{name="variable-name"}, ...}, journalTrace=TRUE|FALSE, keyModify={"string-1", ...}, maxFrequency=64-bit-integer, maxPosition=64-bit-integer, minFrequency=64-bit-integer, minGroupsLL=64-bit-integer, minPosition=64-bit-integer, noVars=TRUE|FALSE, noVars2=TRUE|FALSE, outputNamedTables=TRUE|FALSE, position=64-bit-integer, position2Name="variable-name", positionName="variable-name", sparse=TRUE|FALSE, table={caslib="string", computedOnDemand=TRUE|FALSE, computedVars={{name="variable-name"}, ...}, computedVarsProgram="string", dataSourceOptions={key-1=any-list-or-data-type-1, ...}, 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", singlePass=TRUE|FALSE, vars={{name="variable-name"}, ...}, where="where-expression", whereTable={casLib="string", dataSourceOptions={adls_noreq-parameters | bigquery-parameters | cas_noreq-parameters | clouddex-parameters | db2-parameters | dnfs-parameters | esp-parameters | fedsvr-parameters | gcs_noreq-parameters | hadoop-parameters | hana-parameters | impala-parameters | informix-parameters | jdbc-parameters | mongodb-parameters | mysql-parameters | odbc-parameters | oracle-parameters | path-parameters | postgres-parameters | redshift-parameters | s3-parameters | sapiq-parameters | sforce-parameters | singlestore_standard-parameters | snowflake-parameters | spark-parameters | spde-parameters | sqlserver-parameters | ss_noreq-parameters | teradata-parameters | vertica-parameters | yellowbrick-parameters}, 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={{name="variable-name"}, ...}, where="where-expression"}}, table2={caslib="string", computedOnDemand=TRUE|FALSE, computedVars={{name="variable-name"}, ...}, computedVarsProgram="string", dataSourceOptions={key-1=any-list-or-data-type-1, ...}, 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", singlePass=TRUE|FALSE, vars={{name="variable-name"}, ...}, where="where-expression", whereTable={casLib="string", dataSourceOptions={adls_noreq-parameters | bigquery-parameters | cas_noreq-parameters | clouddex-parameters | db2-parameters | dnfs-parameters | esp-parameters | fedsvr-parameters | gcs_noreq-parameters | hadoop-parameters | hana-parameters | impala-parameters | informix-parameters | jdbc-parameters | mongodb-parameters | mysql-parameters | odbc-parameters | oracle-parameters | path-parameters | postgres-parameters | redshift-parameters | s3-parameters | sapiq-parameters | sforce-parameters | singlestore_standard-parameters | snowflake-parameters | spark-parameters | spde-parameters | sqlserver-parameters | ss_noreq-parameters | teradata-parameters | vertica-parameters | yellowbrick-parameters}, 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={{name="variable-name"}, ...}, where="where-expression"}}, table2Attributes={{name="variable-name"}, ...}, table2CopyVars={"variable-name-1", ...}, table2Inputs={{name="variable-name"}, ...} }
Paramètres
ParamètreDescription
attributes Spécifie les attributs des variables.
casOut Spécifie les paramètres pour une table de sortie.
casOut2 Spécifie la table de sortie casOut2.
copyVars Spécifie les colonnes à copier de la table d'entrée vers la table de sortie casOut. Les variables spécifiées dans le paramètre inputs sont automatiquement copiées.
cumFreq2Name Spécifie le nom de la colonne pour la fréquence cumulée dans les tables de sortie. La colonne montre la fréquence cumulée du groupe auquel l'enregistrement appartient, par rapport à la table de comparaison. Le nom de colonne par défaut est _CumFreq2_.
cumFreqName Spécifie le nom de la colonne pour la fréquence cumulée dans les tables de sortie. La colonne montre la fréquence cumulée du groupe auquel l'enregistrement appartient, par rapport à la table d'entrée. Le nom de colonne par défaut est _CumFreq_.
details Spécifie que des messages tels que le nombre de groupes et d'autres détails sont écrits dans le journal SAS.
divider Spécifie le caractère utilisé pour diviser les valeurs de type caractère des variables d'entrée. Spécifiez un caractère qui n'est pas présent dans ces variables.
freqOut Spécifie les paramètres pour la table de fréquences.
frequency2Name Spécifie le nom de la colonne pour les fréquences de groupe dans les tables de sortie. Le nom de colonne par défaut est _Frequency2_.
frequencyName Spécifie le nom de la colonne pour les fréquences de groupe dans les tables de sortie. Le nom de colonne par défaut est _Frequency_.
generatedColumns Spécifie les colonnes générées à inclure dans les tables de sortie.
groupID2Name Spécifie le nom de la colonne pour les ID de groupe dans les tables de sortie. Le nom de colonne par défaut est _Groupid2_.
groupIDBothName Spécifie le nom de la colonne pour les ID de groupe dans les tables de sortie. Le nom de colonne par défaut est _GroupIDBoth_.
groupIDName Spécifie le nom de la colonne pour les ID de groupe dans les tables de sortie. Le nom de colonne par défaut est _GroupID_.
includeDuplicates Spécifie s'il faut inclure les groupes uniques ou tous les enregistrements dans les tables de sortie.
includeMissing Spécifie que les groupes ayant une valeur manquante dans une variable groupBy sont inclus dans la table casOut.
inputRegEx Spécifie une liste d'expressions régulières, une pour chaque variable dans la liste des entrées.
inputs Spécifie les variables d'entrée pour l'analyse.
journalTrace Lorsque défini sur True, l'action écrit des informations de traçage détaillées dans le journal SAS.
keyModify Spécifie si vous souhaitez que les valeurs de caractères dans les variables d'entrée soient justifiées à gauche (L), à droite (R), converties en majuscules (U), et que les espaces consécutifs soient condensés en un seul (C).
maxFrequency Spécifie que la table de sortie contient des enregistrements avec _Frequency_ inférieur ou égal à ce nombre.
maxPosition Spécifie que la table de sortie contient des enregistrements avec _Position_ inférieur ou égal à ce nombre.
minFrequency Spécifie que la table de sortie contient des enregistrements avec _Frequency_ supérieur ou égal à ce nombre.
minGroupsLL Spécifie le nombre minimum de groupes requis pour utiliser les algorithmes parallèles post-lecture.
minPosition Spécifie que la table de sortie contient des enregistrements avec _Position_ supérieur ou égal à ce nombre.
noVars Lorsque défini sur True, aucune variable n'est automatiquement copiée de la table d'entrée vers la table de sortie.
noVars2 Lorsque défini sur True, aucune variable n'est automatiquement copiée de la table de comparaison vers la table de sortie de comparaison.
outputNamedTables Lorsque défini sur True, les tables casOut, casOut2 et de fréquence sont créées uniquement si le paramètre de la table de sortie est spécifié.
position Spécifie de filtrer les enregistrements pour la table de sortie. Seuls les enregistrements qui correspondent à la valeur spécifiée dans la colonne _Position_ sont inclus.
position2Name Spécifie le nom de la colonne pour la position d'un enregistrement au sein de son groupe dans les tables de sortie. Le nom de colonne par défaut est _Position2_.
positionName Spécifie le nom de la colonne pour la position de l'enregistrement au sein de son groupe dans les tables de sortie. Le nom de colonne par défaut est _Position_.
sparse Lorsque défini sur True et que l'action s'exécute sur un serveur distribué, chaque thread lit des données qui n'appartiennent qu'à quelques groupes. Améliore les performances lorsqu'il y a beaucoup de threads, de groupes, ou les deux.
table Spécifie la table de base, sa caslib et d'autres paramètres communs.
table2 Spécifie la table de comparaison. Les enregistrements et les groupes de cette table sont comparés à ceux de la table de base.
table2Attributes Spécifie les attributs des colonnes spécifiées dans le paramètre table2Inputs.
table2CopyVars Spécifie les colonnes de la table de comparaison à copier vers la sortie de la table de comparaison.
table2Inputs Spécifie les colonnes de la table de comparaison à inclure dans l'analyse.
Préparation des Données Voir la fiche de ce code dataprep
Création des Données de Test

Ce bloc de code crée deux tables CAS, `CARS_TABLE1` et `CARS_TABLE2`. Ces tables contiennent des informations sur différents modèles de voitures et seront utilisées pour illustrer comment l'action `compare` identifie les différences et les similitudes entre elles.

Copié !
1DATA casuser.cars_table1;
2 LENGTH make $ 20 model $ 20;
3 INFILE DATALINES;
4 INPUT make $ model $;
5 DATALINES;
6Ford Mustang
7Ford F-150
8Toyota Camry
9Toyota RAV4
10Honda Civic
11Honda CR-V
12;
13RUN;
14 
15DATA casuser.cars_table2;
16 LENGTH make $ 20 model $ 20;
17 INFILE DATALINES;
18 INPUT make $ model $;
19 DATALINES;
20Ford Mustang
21Ford Explorer
22Toyota Camry
23Toyota Highlander
24Chevrolet Silverado
25Honda Accord
26;
27RUN;

Exemples

Cet exemple compare les enregistrements des tables `cars_table1` et `cars_table2` en se basant sur la colonne `make`. Il identifie les groupes (marques) qui sont uniques à chaque table.

Code SAS® / CAS Code en attente de validation par la communauté
Copié !
1PROC CAS;
2 SIMPLE.compare /
3 TABLE={name='cars_table1', groupBy={'make'}},
4 table2={name='cars_table2', groupBy={'make'}},
5 casOut={name='unique_to_table1', replace=true},
6 casOut2={name='unique_to_table2', replace=true};
7RUN;
Résultat :
Deux tables de sortie sont créées. `unique_to_table1` ne contiendra aucun enregistrement car toutes ses marques sont présentes dans la table 2. `unique_to_table2` contiendra les enregistrements pour 'Chevrolet' car cette marque est unique à la deuxième table.

Cet exemple effectue une comparaison plus approfondie entre `cars_table1` et `cars_table2`. Il utilise le paramètre `freqOut` pour créer une table (`comparison_freq`) qui montre les différences de fréquence pour chaque marque entre les deux tables. Le paramètre `includeDuplicates` est utilisé pour s'assurer que la table de fréquence inclut tous les groupes, pas seulement ceux avec des fréquences différentes. De plus, `generatedColumns` est défini sur 'ALL' pour inclure toutes les colonnes d'analyse possibles dans les tables de sortie, telles que les ID de groupe et les fréquences cumulées.

Code SAS® / CAS Code en attente de validation par la communauté
Copié !
1PROC CAS;
2 SIMPLE.compare /
3 TABLE={name='cars_table1', groupBy={'make'}},
4 table2={name='cars_table2', groupBy={'make'}},
5 freqOut={name='comparison_freq', replace=true},
6 includeDuplicates={'FREQOUT'},
7 generatedColumns={'ALL'};
8RUN;
Résultat :
Une table de sortie `comparison_freq` est créée. Elle listera chaque marque (`make`) et affichera sa fréquence dans `cars_table1` (colonne _Frequency_) et dans `cars_table2` (colonne _Frequency2_). Par exemple, Ford aura une fréquence de 2 dans la première table et 2 dans la seconde, tandis que Chevrolet aura une fréquence de 0 dans la première et 1 dans la seconde.

FAQ

Quel est l'objectif principal de l'action `compare` dans l'ensemble d'actions Simple Analytics ?
Quelles sont les tables d'entrée requises pour l'action `compare` ?
Quels types de tables de sortie peuvent être générés par l'action `compare` ?
Comment peut-on inclure tous les enregistrements, y compris les doublons, dans les tables de sortie ?
À quoi sert le paramètre `generatedColumns` ?
Est-il possible de spécifier les noms des colonnes générées comme la fréquence ou l'ID de groupe ?

Scénarios associés

Cas d'usage
Filtrage de Cibles Marketing par Liste d'Exclusion

Une banque souhaite lancer une campagne promotionnelle par email. Elle dispose d'une liste brute de clients éligibles et d'une 'Liste Noire' (clients ayant refusé le démarchage ...

Cas d'usage
Vérification de la Synchronisation de Données IoT (Volumétrie & Fréquence)

Une usine intelligente transmet des logs de capteurs vers le cloud. Suite à une coupure réseau, l'équipe Data Engineering doit comparer les logs locaux (table 1) et les logs reç...

Cas d'usage
Audit RH avec Gestion des Valeurs Manquantes et Doublons

Lors d'une fusion d'entreprises, le service RH compare deux fichiers de personnel. Le défi est double : certains employés ont des codes département manquants (NULL) qui doivent ...