Publié le :
ETL CREATION_INTERNE

Exemples: Préparer les données

Ce code est également disponible en : Deutsch English Español
En attente de validation
L'analyse fonctionnelle se concentre sur l'identification et la résolution des défis liés à la fusion de jeux de données. Elle couvre l'utilisation de PROC CONTENTS et PROC PRINT pour l'examen initial des données, PROC SQL pour la détection de variables communes, et des étapes DATA avec des fonctions comme CATX et INPUT, ainsi que les instructions LENGTH et ATTRIB, pour uniformiser les attributs des variables. Les exemples illustrent comment gérer les différences de type, de longueur, de format et de libellé des variables, et comment créer des identifiants uniques pour les valeurs BY en double afin d'assurer des opérations de fusion correctes. Les relations entre les jeux de données (un-à-plusieurs, plusieurs-à-un, un-à-un) sont également abordées, soulignant l'importance d'une préparation adéquate pour chaque méthode de combinaison.
Analyse des données

Type : CREATION_INTERNE


Les exemples utilisent des données générées (datalines) ou SASHELP, ainsi que des jeux de données prédéfinis comme Inventory, Sales, Sales2019, CarsSmall, Class et Classfit, créés en interne pour les besoins de la démonstration.

1 Bloc de code
PROC CONTENTS / PROC SORT / PROC PRINT Data
Explication :
Visualise les informations descriptives des jeux de données d'entrée pour identifier les variables communes et compare leurs attributs. Trie les jeux de données par la variable PartNumber. Imprime les jeux de données pour examiner les valeurs de la variable commune et déterminer la relation entre les jeux de données.
Copié !
1PROC CONTENTS DATA=Inventory; RUN;
2PROC CONTENTS DATA=Sales; RUN;
3PROC CONTENTS DATA=Sales2019; RUN;
4QUIT;
5PROC SORT DATA=inventory; BY PartNumber; RUN;
6PROC SORT DATA=Sales; BY PartNumber; RUN;
7PROC SORT DATA=Sales2019; BY PartNumber; RUN;
8 
9PROC PRINT DATA=inventory; RUN;
10PROC PRINT DATA=Sales; RUN;
11PROC PRINT DATA=Sales2019; RUN;
2 Bloc de code
PROC SQL Data
Explication :
Crée une table temporaire 'commonvars' à partir des colonnes des jeux de données 'INVENTORY', 'SALES' et 'SALES2019' dans la bibliothèque WORK. Sélectionne ensuite les noms de variables qui sont communs à tous ces jeux de données en groupant par nom et en vérifiant que le compte correspond au nombre de jeux de données uniques.
Copié !
1PROC SQL;
2 title "Variables Common to Inventory, Sales, and Sales2019";
3 create TABLE commonvars as
4 select memname, upcase(name) as name
5 from dictionary.columns
6 where LIBNAME='WORK' and
7 memname in ('INVENTORY', 'SALES', 'SALES2019');
8 select name
9 from commonvars
10 group BY name
11 having count(*)=(select count(distinct(memname)) from commonvars);
12QUIT;
3 Bloc de code
PROC SORT / PROC FREQ / DATA STEP Data
Explication :
Trie les données de vente par 'partNumber'. Utilise PROC FREQ pour identifier les doublons de 'partNumber' et les stocke dans 'SalesDupes'. Ensuite, dans une étape DATA, crée un nouvel identifiant unique 'uniqueID' en concaténant 'partNumber' avec le numéro d'observation automatique (_N_) à l'aide de la fonction CATX pour chaque enregistrement du jeu de données 'Sales'. Enfin, imprime le nouveau jeu de données 'SalesUnique' avec la variable 'uniqueID'.
Copié !
1PROC SORT DATA=sales;
2 BY partNumber;
3RUN;
4PROC PRINT DATA=sales; RUN;
5 
6PROC FREQ DATA = Sales noprint;
7 tables partNumber / out = SalesDupes
8 (keep = partNumber Count
9 where = (Count > 1));
10RUN;
11 
12PROC PRINT DATA=SalesDupes;RUN;
13 
14DATA SalesUnique;
15 SET Sales;
16 uniqueID = catx('.',partNumber,_n_);
17RUN;
18 
19PROC PRINT DATA=SalesUnique;
20 var uniqueID partNumber partName salesPerson;
21RUN;
4 Bloc de code
DATA STEP / PROC CONTENTS / PROC MERGE Data
Explication :
Crée un jeu de données 'cars' à partir de 'sashelp.cars'. Affiche les informations descriptives des jeux de données 'cars' et 'CarsSmall'. Tente de fusionner 'cars' et 'CarsSmallNum' par 'make' et 'model', mais échoue en raison de types de données incompatibles pour la variable 'Weight'.

Pour corriger le problème:
data CarsSmallNum;
set CarsSmall;
weightNum=input(weight, 8.);
drop weight;
rename WeightNum=weight;
run;

proc sort data=cars; by make model; run;
proc sort data=CarsSmallNum; by Make Model; run;

data combineCars;
merge cars CarsSmallNum;
by make model;
keep Make DriveTrain Model MakeModelDrive Weight;
run;
proc contents data=combineCars; run;
proc print data=combineCars; run;
Copié !
1DATA cars;
2 SET sashelp.cars;
3RUN;
4 
5PROC CONTENTS DATA=cars; RUN;
6PROC CONTENTS DATA=CarsSmall; RUN;
7 
8DATA combineCars;
9 MERGE cars CarsSmallNum;
10 BY make model;
11 keep Make DriveTrain Model MakeModelDrive Weight;
12RUN;
5 Bloc de code
PROC PRINT / PROC MERGE / DATA STEP Data
Explication :
Imprime les jeux de données 'quarter1', 'quarter2', 'quarter3', 'quarter4'. Tente de fusionner ces jeux de données par 'Account'. La première tentative peut générer un avertissement en raison de longueurs différentes pour la variable 'Mileage'. La deuxième étape DATA utilise l'instruction LENGTH pour définir explicitement la longueur de 'Mileage' à 6 avant la fusion, garantissant une longueur cohérente dans le jeu de données 'yearly'. PROC CONTENTS est ensuite exécuté pour vérifier les attributs du jeu de données fusionné.
Copié !
1PROC PRINT DATA=quarter1; RUN;
2PROC PRINT DATA=quarter2; RUN;
3PROC PRINT DATA=quarter3; RUN;
4PROC PRINT DATA=quarter4; RUN;
5 
6DATA yearly;
7 MERGE quarter1 quarter2 quarter3 quarter4;
8 BY Account;
9RUN;
10 
11DATA yearly;
12 LENGTH Mileage 6;
13 MERGE quarter1 quarter2 quarter3 quarter4;
14 BY Account;
15RUN;
16PROC CONTENTS DATA=yearly; RUN;
6 Bloc de code
PROC CONTENTS / PROC SORT / DATA STEP Data
Explication :
Visualise les informations descriptives des jeux de données 'class' et 'classfit' pour identifier les variables communes et comparer leurs attributs, en se concentrant sur les différences de formats et de libellés pour 'Height' et 'Weight'. Trie les jeux de données par 'Name'. Fusionne 'class' et 'classfit' par 'Name'. Utilise l'instruction ATTRIB pour définir explicitement le libellé de 'Weight' et le format 'comma8.2' pour 'Height', 'Weight' et 'Predict'. Imprime et affiche les attributs du jeu de données 'merged' résultant.
Copié !
1PROC CONTENTS DATA=class; RUN;
2PROC CONTENTS DATA=classfit; RUN;
3 
4PROC SORT DATA=class; BY name; RUN;
5PROC SORT DATA=classfit; BY name; RUN;
6 
7DATA merged;
8 MERGE class classfit; BY Name;
9 attrib Weight
10 label = "Weight";
11 attrib Height Weight Predict FORMAT=comma8.2;
12RUN;
13PROC PRINT DATA=merged;
14RUN;
15PROC CONTENTS DATA=merged; RUN;
7 Bloc de code
DATA STEP Data
Explication :
Renomme la variable 'Weight' en 'WeightLBS' dans le jeu de données 'vehicles' lors de sa création ou modification. Ceci est fait pour différencier les variables qui ont le même nom mais représentent des données différentes, évitant ainsi des problèmes lors de la fusion avec d'autres jeux de données.
Copié !
1 
2DATA vehicles(rename=(weight=weightLBS));
3SET vehicles;
4RUN;
5 
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : Copyright © SAS Institute Inc. All Rights Reserved


Banner
Le Conseil de l'Expert
Expert
Simon
Expert SAS et fondateur.
« Une préparation de données robuste transforme un processus fragile en un pipeline fiable. En renommant vos variables (RENAME) et en harmonisant les libellés et formats dès l'étape de fusion, vous garantissez la qualité des analyses futures. Une donnée bien préparée est une donnée déjà à moitié analysée. »