Veröffentlicht am :
Datenmanipulation CREATION_INTERNE

Beispiele: Daten vorbereiten

Dieser Code ist auch verfügbar auf: English Español
Detaillierte funktionale Analyse der verschiedenen Methoden zur Datenvorbereitung. Beinhaltet Techniken zur Datenprüfung (PROC CONTENTS, PROC PRINT), zum Auffinden gemeinsamer Variablen (PROC SQL), zum Erstellen eindeutiger BY-Werte bei Duplikaten (PROC FREQ, CATX-Funktion), zum Umgang mit unterschiedlichen Datentypen (INPUT-Funktion), zum Anpassen von Variablenlängen (LENGTH- oder ATTRIB-Anweisung) und zur Standardisierung von Formaten und Labels (ATTRIB-Anweisung). Die Beispiele zielen darauf ab, die Kompatibilität der Attribute gemeinsamer Variablen für erfolgreiche Datenkombinationsoperationen sicherzustellen.
Datenanalyse

Type : CREATION_INTERNE


Die Beispiele verwenden generierte Daten (Datalines) oder SASHELP sowie vordefinierte Datensätze aus der SAS-Dokumentation.

1 Codeblock
PROC CONTENTS / PROC SORT / PROC PRINT
Erklärung :
Dieses Beispiel verwendet die Prozeduren PROC CONTENTS, PROC SORT und PROC PRINT, um beschreibende Informationen zu überprüfen, die Datensätze 'Inventory', 'Sales' und 'Sales2019' vor der Kombination zu sortieren und auszudrucken. Ziel ist es, die Kompatibilität gemeinsamer Variablen zu überprüfen und die Beziehungen zwischen den Datensätzen zu identifizieren.
Kopiert!
1PROC CONTENTS DATA=Inventory; RUN; /* 1*/
2PROC CONTENTS DATA=Sales; RUN;
3PROC CONTENTS DATA=Sales2019; RUN;
4QUIT;
5PROC SORT DATA=inventory; BY PartNumber; RUN; /* 2*/
6PROC SORT DATA=Sales; BY PartNumber; RUN;
7PROC SORT DATA=Sales2019; BY PartNumber; RUN;
8 
9PROC PRINT DATA=inventory; RUN /* 3*/;
10PROC PRINT DATA=Sales; RUN;
11PROC PRINT DATA=Sales2019; RUN;
2 Codeblock
PROC SQL
Erklärung :
Dieses Beispiel verwendet PROC SQL, um die gemeinsamen Variablen der Datensätze 'Inventory', 'Sales' und 'Sales2019' zu finden. Es erstellt eine temporäre Tabelle 'commonvars' aus 'dictionary.columns' und wählt dann die Variablennamen aus, die in allen angegebenen Datensätzen vorkommen.
Kopiert!
1PROC SQL;
2 title "Variables Common to Inventory, Sales, and Sales2019";
3 create TABLE commonvars as /* 1 */
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 /* 2 */
9 from commonvars
10 group BY name
11 having count(*)=(select count(distinct(memname)) from commonvars);
12QUIT;
3 Codeblock
PROC SORT / PROC FREQ / DATA STEP
Erklärung :
Dieses Beispiel zeigt, wie doppelte Werte in einer BY-Variablen gehandhabt werden. Es verwendet PROC FREQ, um Duplikate von 'partNumber' im Datensatz 'Sales' zu identifizieren, und dann einen DATA-Schritt mit der CATX-Funktion und der automatischen Variablen _N_, um einen eindeutigen Bezeichner ('uniqueID') für jede Beobachtung, einschließlich der Duplikate, zu erstellen.
Kopiert!
1PROC SORT DATA=sales; /* 1 */
2 BY partNumber;
3RUN;
4PROC PRINT DATA=sales; RUN;
5 
6PROC FREQ DATA = Sales noprint; /* 2 */
7 tables partNumber / out = SalesDupes
8 (keep = partNumber Count
9 where = (Count > 1));
10RUN;
11 
12PROC PRINT DATA=SalesDupes;RUN;
13 
14DATA SalesUnique; /* 3 */
15 SET Sales;
16 uniqueID = catx('.',partNumber,_n_);
17RUN;
18 
19PROC PRINT DATA=SalesUnique; /* 4 */
20 var uniqueID partNumber partName salesPerson;
21RUN;
4 Codeblock
DATA STEP / PROC CONTENTS
Erklärung :
Dieses Beispiel veranschaulicht ein Problem mit inkompatiblen Datentypen beim Zusammenführen von Datensätzen. Zunächst schlägt ein Zusammenführungsversuch fehl, da die Variable 'Weight' in 'CarsSmall' vom Typ CHAR und in 'Cars' NUMERIC ist. Um dieses Problem zu beheben, zeigt das Beispiel, wie die Variable 'Weight' von 'CarsSmall' mithilfe der INPUT-Funktion in einen numerischen Wert umgewandelt und umbenannt wird, bevor die Zusammenführung erfolgt.
Kopiert!
1DATA cars; /* 1 */
2 SET sashelp.cars;
3RUN;
4 
5PROC CONTENTS DATA=cars; RUN; /* 2 */
6PROC CONTENTS DATA=CarsSmall; RUN;
7 
8DATA combineCars;
9 MERGE cars CarsSmallNum; /* 3*/
10 BY make model;
11 keep Make DriveTrain Model MakeModelDrive Weight;
12RUN;
5 Codeblock
DATA STEP / PROC SORT / PROC CONTENTS / PROC PRINT
Erklärung :
Korrektur des vorherigen Beispiels: Dieser Code löst das Problem der Datentyp-Inkompatibilität, indem er einen neuen Datensatz 'CarsSmallNum' erstellt, in dem die Variable 'Weight' mithilfe der INPUT-Funktion in einen numerischen Wert umgewandelt wird. Die ursprüngliche Variable wird gelöscht und die neue wird umbenannt. Anschließend werden die Datensätze erfolgreich sortiert und zusammengeführt. PROC CONTENTS und PROC PRINT werden verwendet, um das Ergebnis zu überprüfen.
Kopiert!
1DATA CarsSmallNum; /* 1 */
2 SET CarsSmall;
3 weightNum=INPUT(weight, 8.);
4 drop weight;
5 rename WeightNum=weight;
6RUN;
7 
8PROC SORT DATA=cars; BY make model; RUN; /* 2 */
9PROC SORT DATA=CarsSmallNum; BY Make Model; RUN;
10 
11DATA combineCars;
12 MERGE cars CarsSmallNum; /* 3 */
13 BY make model;
14 keep Make DriveTrain Model MakeModelDrive Weight;
15RUN;
16PROC CONTENTS DATA=combineCars; RUN; /* 4*/
17PROC PRINT DATA=combineCars; RUN;
6 Codeblock
PROC PRINT / DATA STEP / PROC CONTENTS
Erklärung :
Dieses Beispiel zeigt, wie unterschiedliche Längen für eine gemeinsame Variable ('Mileage') beim Zusammenführen von Datensätzen gehandhabt werden. Es zeigt, dass SAS standardmäßig die Länge der ersten in der MERGE-Anweisung aufgeführten Tabelle verwendet. Um die Länge explizit zu steuern, muss die LENGTH-Anweisung vor der MERGE-Anweisung im DATA-Schritt verwendet werden.
Kopiert!
1PROC PRINT DATA=quarter1; RUN; /* 1 */
2PROC PRINT DATA=quarter2; RUN;
3PROC PRINT DATA=quarter3; RUN;
4PROC PRINT DATA=quarter4; RUN;
5 
6DATA yearly;
7 MERGE quarter1 quarter2 quarter3 quarter4; /* 2 */
8 BY Account;
9RUN;
10 
11DATA yearly; /* 3 */
12 LENGTH Mileage 6;
13 MERGE quarter1 quarter2 quarter3 quarter4;
14 BY Account;
15RUN;
16PROC CONTENTS DATA=yearly; RUN; /* 4 */
7 Codeblock
DATA STEP
Erklärung :
Korrektur des vorherigen Beispiels: Diese Version zeigt, wie die ATTRIB-Anweisung verwendet wird, um die Länge der Variablen 'Mileage' explizit auf 6 Bytes festzulegen, bevor die Datensätze zusammengeführt werden, wodurch sichergestellt wird, dass die gewünschte Länge im Ausgabedatensatz angewendet wird.
Kopiert!
1DATA yearly;
2 MERGE quarter1 quarter2 quarter3 quarter4;
3 BY Account;
4 attrib Mileage
5 LENGTH = 6;
6RUN;
8 Codeblock
PROC CONTENTS / PROC SORT / DATA STEP / PROC PRINT
Erklärung :
Dieses Beispiel behandelt die Unterschiede in Formaten und Labels für die gemeinsamen Variablen ('Height' und 'Weight') beim Zusammenführen der Datensätze 'class' und 'classfit'. Es zeigt, wie die ATTRIB-Anweisung in einem DATA-Schritt verwendet werden kann, um das Label und das Format der Variablen im Ausgabedatensatz explizit zu definieren, wodurch das Standardverhalten von SAS, die Attribute des ersten aufgelisteten Datensatzes zu übernehmen, überschrieben wird.
Kopiert!
1PROC CONTENTS DATA=class; RUN; /* 1 */
2PROC CONTENTS DATA=classfit; RUN;
3 
4PROC SORT DATA=class; BY name; RUN; /* 2 */
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; /* 3 */
12RUN;
13PROC PRINT DATA=merged; /* 4 */
14RUN;
15PROC CONTENTS DATA=merged; RUN;
9 Codeblock
DATA STEP
Erklärung :
Dieses Beispiel behandelt den Fall, dass Variablen den gleichen Namen haben, aber unterschiedliche Daten darstellen (und daher nicht wirklich gemeinsame Variablen sind). Die Lösung besteht darin, die Option RENAME= des Datensatzes in der DATA-Anweisung zu verwenden, um die Variable 'Weight' in 'weightLBS' im Datensatz 'vehicles' (aus CarsSmall) umzubenennen und so einen Konflikt oder eine falsche Zusammenführung beim Kombinieren von Daten zu vermeiden.
Kopiert!
1 
2DATA vehicles(rename=(weight=weightLBS));
3SET vehicles;
4RUN;
5 
Dieses Material wird von We Are Cas "wie besehen" zur Verfügung gestellt. Es gibt keine ausdrücklichen oder stillschweigenden Garantien hinsichtlich der Marktgängigkeit oder Eignung für einen bestimmten Zweck in Bezug auf die hierin enthaltenen Materialien oder Codes. We Are Cas ist nicht verantwortlich für Fehler in diesem Material, wie es jetzt existiert oder existieren wird, noch bietet We Are Cas technischen Support dafür an.
Urheberrechtsinformationen : Copyright © SAS Institute Inc. All Rights Reserved