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.
PROC SORTDATA=inventory; BY PartNumber; RUN; /* 2*/
6
PROC SORTDATA=Sales; BY PartNumber; RUN;
7
PROC SORTDATA=Sales2019; BY PartNumber; RUN;
8
9
PROC PRINTDATA=inventory; RUN/* 3*/;
10
PROC PRINTDATA=Sales; RUN;
11
PROC PRINTDATA=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!
proc sql;
title "Variables Common to Inventory, Sales, and Sales2019";
create table commonvars as /* 1 */
select memname, upcase(name) as name
from dictionary.columns
where libname='WORK' and
memname in ('INVENTORY', 'SALES', 'SALES2019');
select name /* 2 */
from commonvars
group by name
having count(*)=(select count(distinct(memname)) from commonvars);
quit;
1
PROC 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);
12
QUIT;
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!
proc sort data=sales; /* 1 */
by partNumber;
run;
proc print data=sales; run;
proc freq data = Sales noprint; /* 2 */
tables partNumber / out = SalesDupes
(keep = partNumber Count
where = (Count > 1));
run;
proc print data=SalesDupes;run;
data SalesUnique; /* 3 */
set Sales;
uniqueID = catx('.',partNumber,_n_);
run;
proc print data=SalesUnique; /* 4 */
var uniqueID partNumber partName salesPerson;
run;
1
PROC SORTDATA=sales; /* 1 */
2
BY partNumber;
3
RUN;
4
PROC PRINTDATA=sales; RUN;
5
6
PROC FREQDATA = Sales noprint; /* 2 */
7
tables partNumber / out = SalesDupes
8
(keep = partNumber Count
9
where = (Count > 1));
10
RUN;
11
12
PROC PRINTDATA=SalesDupes;RUN;
13
14
DATA SalesUnique; /* 3 */
15
SET Sales;
16
uniqueID = catx('.',partNumber,_n_);
17
RUN;
18
19
PROC PRINTDATA=SalesUnique; /* 4 */
20
var uniqueID partNumber partName salesPerson;
21
RUN;
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!
data cars; /* 1 */
set sashelp.cars;
run;
proc contents data=cars; run; /* 2 */
proc contents data=CarsSmall; run;
data combineCars;
merge cars CarsSmallNum; /* 3*/
by make model;
keep Make DriveTrain Model MakeModelDrive Weight;
run;
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!
data CarsSmallNum; /* 1 */
set CarsSmall;
weightNum=input(weight, 8.);
drop weight;
rename WeightNum=weight;
run;
proc sort data=cars; by make model; run; /* 2 */
proc sort data=CarsSmallNum; by Make Model; run;
data combineCars;
merge cars CarsSmallNum; /* 3 */
by make model;
keep Make DriveTrain Model MakeModelDrive Weight;
run;
proc contents data=combineCars; run; /* 4*/
proc print data=combineCars; run;
1
DATA CarsSmallNum; /* 1 */
2
SET CarsSmall;
3
weightNum=INPUT(weight, 8.);
4
drop weight;
5
rename WeightNum=weight;
6
RUN;
7
8
PROC SORTDATA=cars; BY make model; RUN; /* 2 */
9
PROC SORTDATA=CarsSmallNum; BY Make Model; RUN;
10
11
DATA combineCars;
12
MERGE cars CarsSmallNum; /* 3 */
13
BY make model;
14
keep Make DriveTrain Model MakeModelDrive Weight;
15
RUN;
16
PROC CONTENTSDATA=combineCars; RUN; /* 4*/
17
PROC PRINTDATA=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.
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!
data yearly;
merge quarter1 quarter2 quarter3 quarter4;
by Account;
attrib Mileage
length = 6;
run;
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.
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!
data vehicles(rename=(weight=weightLBS));
set vehicles;
run;
1
2
DATA vehicles(rename=(weight=weightLBS));
3
SET vehicles;
4
RUN;
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.
SAS und alle anderen Produkt- oder Dienstleistungsnamen von SAS Institute Inc. sind eingetragene Marken oder Marken von SAS Institute Inc. in den USA und anderen Ländern. ® zeigt die Registrierung in den USA an. WeAreCAS ist eine unabhängige Community-Site und nicht mit SAS Institute Inc. verbunden.
Diese Website verwendet technische und analytische Cookies, um Ihre Erfahrung zu verbessern.
Mehr erfahren.