Die funktionale Analyse konzentriert sich auf die Identifizierung und Lösung von Herausforderungen bei der Zusammenführung von Datensätzen. Sie behandelt die Verwendung von PROC CONTENTS und PROC PRINT zur anfänglichen Datenprüfung, PROC SQL zur Erkennung gemeinsamer Variablen und DATA-Schritte mit Funktionen wie CATX und INPUT sowie den Anweisungen LENGTH und ATTRIB, um Variablenattribute zu vereinheitlichen. Die Beispiele zeigen, wie man mit Unterschieden in Variablentyp, -länge, -format und -beschriftung umgeht und wie man eindeutige Identifikatoren für doppelte BY-Werte erstellt, um korrekte Zusammenführungsoperationen zu gewährleisten. Die Beziehungen zwischen Datensätzen (eins-zu-viele, viele-zu-eins, eins-zu-eins) werden ebenfalls behandelt, wobei die Bedeutung einer angemessenen Vorbereitung für jede Kombinationsmethode hervorgehoben wird.
Datenanalyse
Type : CREATION_INTERNE
Die Beispiele verwenden generierte Daten (Datalines) oder SASHELP sowie vordefinierte Datensätze wie Inventory, Sales, Sales2019, CarsSmall, Class und Classfit, die intern für Demonstrationszwecke erstellt wurden.
1 Codeblock
PROC CONTENTS / PROC SORT / PROC PRINT Data
Erklärung : Zeigt deskriptive Informationen der Eingangsdatensätze an, um gemeinsame Variablen zu identifizieren und deren Attribute zu vergleichen. Sortiert die Datensätze nach der Variablen PartNumber. Druckt die Datensätze, um die Werte der gemeinsamen Variablen zu untersuchen und die Beziehung zwischen den Datensätzen zu bestimmen.
Erklärung : Erstellt eine temporäre Tabelle 'commonvars' aus den Spalten der Datensätze 'INVENTORY', 'SALES' und 'SALES2019' in der Bibliothek WORK. Wählt dann die Variablennamen aus, die allen diesen Datensätzen gemeinsam sind, indem nach Namen gruppiert und überprüft wird, ob die Anzahl der Anzahl der eindeutigen Datensätze entspricht.
Kopiert!
proc sql;
title "Variables Common to Inventory, Sales, and Sales2019";
create table commonvars as
select memname, upcase(name) as name
from dictionary.columns
where libname='WORK' and
memname in ('INVENTORY', 'SALES', 'SALES2019');
select name
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
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);
12
QUIT;
3 Codeblock
PROC SORT / PROC FREQ / DATA STEP Data
Erklärung : Sortiert die Verkaufsdaten nach 'partNumber'. Verwendet PROC FREQ, um Duplikate von 'partNumber' zu identifizieren und speichert sie in 'SalesDupes'. Anschließend wird in einem DATA-Schritt ein neuer eindeutiger Identifikator 'uniqueID' erstellt, indem 'partNumber' mit der automatischen Beobachtungsnummer (_N_) mittels der CATX-Funktion für jeden Eintrag im Datensatz 'Sales' verkettet wird. Schließlich wird der neue Datensatz 'SalesUnique' mit der Variablen 'uniqueID' gedruckt.
Kopiert!
proc sort data=sales;
by partNumber;
run;
proc print data=sales; run;
proc freq data = Sales noprint;
tables partNumber / out = SalesDupes
(keep = partNumber Count
where = (Count > 1));
run;
proc print data=SalesDupes;run;
data SalesUnique;
set Sales;
uniqueID = catx('.',partNumber,_n_);
run;
proc print data=SalesUnique;
var uniqueID partNumber partName salesPerson;
run;
1
PROC SORTDATA=sales;
2
BY partNumber;
3
RUN;
4
PROC PRINTDATA=sales; RUN;
5
6
PROC FREQDATA = Sales noprint;
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;
15
SET Sales;
16
uniqueID = catx('.',partNumber,_n_);
17
RUN;
18
19
PROC PRINTDATA=SalesUnique;
20
var uniqueID partNumber partName salesPerson;
21
RUN;
4 Codeblock
DATA STEP / PROC CONTENTS / PROC MERGE Data
Erklärung : Erstellt einen Datensatz 'cars' aus 'sashelp.cars'. Zeigt deskriptive Informationen der Datensätze 'cars' und 'CarsSmall' an. Versucht, 'cars' und 'CarsSmallNum' nach 'make' und 'model' zusammenzuführen, schlägt jedoch aufgrund inkompatibler Datentypen für die Variable 'Weight' fehl.
Zur Korrektur des Problems:
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;
Kopiert!
data cars;
set sashelp.cars;
run;
proc contents data=cars; run;
proc contents data=CarsSmall; run;
data combineCars;
merge cars CarsSmallNum;
by make model;
keep Make DriveTrain Model MakeModelDrive Weight;
run;
1
DATA cars;
2
SET sashelp.cars;
3
RUN;
4
5
PROC CONTENTSDATA=cars; RUN;
6
PROC CONTENTSDATA=CarsSmall; RUN;
7
8
DATA combineCars;
9
MERGE cars CarsSmallNum;
10
BY make model;
11
keep Make DriveTrain Model MakeModelDrive Weight;
12
RUN;
5 Codeblock
PROC PRINT / PROC MERGE / DATA STEP Data
Erklärung : Druckt die Datensätze 'quarter1', 'quarter2', 'quarter3', 'quarter4'. Versucht, diese Datensätze nach 'Account' zusammenzuführen. Der erste Versuch kann aufgrund unterschiedlicher Längen für die Variable 'Mileage' eine Warnung erzeugen. Der zweite DATA-Schritt verwendet die LENGTH-Anweisung, um die Länge von 'Mileage' vor der Zusammenführung explizit auf 6 zu setzen, um eine konsistente Länge im Datensatz 'yearly' zu gewährleisten. PROC CONTENTS wird dann ausgeführt, um die Attribute des zusammengeführten Datensatzes zu überprüfen.
Erklärung : Zeigt deskriptive Informationen der Datensätze 'class' und 'classfit' an, um gemeinsame Variablen zu identifizieren und deren Attribute zu vergleichen, wobei der Schwerpunkt auf Format- und Beschriftungsunterschieden für 'Height' und 'Weight' liegt. Sortiert die Datensätze nach 'Name'. Führt 'class' und 'classfit' nach 'Name' zusammen. Verwendet die ATTRIB-Anweisung, um die Beschriftung von 'Weight' und das Format 'comma8.2' für 'Height', 'Weight' und 'Predict' explizit zu definieren. Druckt und zeigt die Attribute des resultierenden Datensatzes 'merged' an.
Kopiert!
proc contents data=class; run;
proc contents data=classfit; run;
proc sort data=class; by name; run;
proc sort data=classfit; by name; run;
data merged;
merge class classfit; by Name;
attrib Weight
label = "Weight";
attrib Height Weight Predict format=comma8.2;
run;
proc print data=merged;
run;
proc contents data=merged; run;
1
PROC CONTENTSDATA=class; RUN;
2
PROC CONTENTSDATA=classfit; RUN;
3
4
PROC SORTDATA=class; BY name; RUN;
5
PROC SORTDATA=classfit; BY name; RUN;
6
7
DATA merged;
8
MERGE class classfit; BY Name;
9
attrib Weight
10
label = "Weight";
11
attrib Height Weight Predict FORMAT=comma8.2;
12
RUN;
13
PROC PRINTDATA=merged;
14
RUN;
15
PROC CONTENTSDATA=merged; RUN;
7 Codeblock
DATA STEP Data
Erklärung : Benennt die Variable 'Weight' in 'WeightLBS' im Datensatz 'vehicles' um, während er erstellt oder geändert wird. Dies geschieht, um Variablen zu unterscheiden, die denselben Namen haben, aber unterschiedliche Daten repräsentieren, und so Probleme beim Zusammenführen mit anderen Datensätzen 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.