Das Skript vergleicht das Verhalten verschiedener Methoden zum Hinzufügen von Daten. Es untersucht den DATA-Schritt mit der SET-Anweisung, die Mengenoperatoren von PROC SQL (UNION, UNION ALL, UNION CORR, OUTER UNION) und die Prozedur PROC DATASETS mit der APPEND-Anweisung. Es hebt die Handhabung von Duplikaten, die Ausrichtung von Spalten (unterschiedliche Benennung) und die Verwendung der Option FORCE hervor, wenn die Tabellenstrukturen voneinander abweichen.
Datenanalyse
Type : MIXTE
Die Daten werden aus der Systemtabelle 'sashelp.class' für die Tabelle 'big' abgeleitet und manuell über einen DATA-Schritt für die Tabelle 'small' erstellt.
1 Codeblock
DATA STEP Data
Erklärung : Erstellung von zwei Arbeitstabellen: 'big' (aus sashelp.class extrahiert mit beabsichtigter Duplizierung) und 'small' (eine einzelne Zeile mit unterschiedlichen Spaltennamen/Reihenfolge, um strukturelle Inkompatibilitäten zu simulieren).
Kopiert!
title '2.8 Appending Data Sets';
* Create a not so big data set;
data big;
set sashelp.class(keep=name sex age height weight);
where name > 'L';
output big;
* create a duplicate for Mary;
if name=:'M' then output big;
run;
data small;
* The variable WEIGHT has been misspelled as WT;
* The variables WT and HEIGHT are out of order;
name='fred'; sex='m'; age=5; wt=45; height=30;
run;
1
title '2.8 Appending Data Sets';
2
* Create a not so big data set;
3
DATA big;
4
SET sashelp.class(keep=name sex age height weight);
5
where name > 'L';
6
OUTPUT big;
7
* create a duplicate for Mary;
8
IF name=:'M'THENOUTPUT big;
9
RUN;
10
DATA small;
11
* The variable WEIGHT has been misspelled as WT;
12
* The variables WT and HEIGHT are out of order;
13
name='fred'; sex='m'; age=5; wt=45; height=30;
14
RUN;
2 Codeblock
DATA STEP Data
Erklärung : Einfache Verkettung unter Verwendung des DATA-Schritts und der SET-Anweisung. Dies stapelt die beiden Tabellen. Spalten, die in einer, aber nicht in der anderen vorhanden sind (z.B. 'wt'), haben in den Zeilen, die aus der Tabelle stammen, in der sie fehlen, fehlende Werte.
Kopiert!
title2 'Using the SET Statement';
* Append using the SET statement;
data bigger;
set big small;
run;
proc print data=bigger;
run;
1
title2 'Using the SET Statement';
2
* Append using the SET statement;
3
DATA bigger;
4
SET big small;
5
RUN;
6
PROC PRINTDATA=bigger;
7
RUN;
3 Codeblock
PROC SQL Data
Erklärung : Verwendung des SQL-Operators UNION. Diese Methode verkettet die Ergebnisse, entfernt jedoch Zeilen, die exakte Duplikate sind (Standardverhalten von UNION).
Kopiert!
title2 'Using SQL UNION';
* Append using UNION;
proc sql noprint;
create table bigger as
select *
from big
union
select *
from small;
quit;
proc print data=bigger;
run;
1
title2 'Using SQL UNION';
2
* Append using UNION;
3
PROC SQL noprint;
4
create TABLE bigger as
5
select *
6
from big
7
union
8
select *
9
from small;
10
QUIT;
11
PROC PRINTDATA=bigger;
12
RUN;
4 Codeblock
PROC SQL Data
Erklärung : Verwendung von SQL UNION ALL. Im Gegensatz zum einfachen UNION behält UNION ALL alle Zeilen bei, einschließlich Duplikate.
Kopiert!
title2 'Using SQL UNION ALL';
* Append using UNION;
proc sql noprint;
create table bigger as
select *
from big
union all
select *
from small;
quit;
proc print data=bigger;
run;
1
title2 'Using SQL UNION ALL';
2
* Append using UNION;
3
PROC SQL noprint;
4
create TABLE bigger as
5
select *
6
from big
7
union all
8
select *
9
from small;
10
QUIT;
11
PROC PRINTDATA=bigger;
12
RUN;
5 Codeblock
PROC SQL Data
Erklärung : Verwendung von UNION ALL mit expliziter Umbenennung der Spalte 'wt' in 'Weight' in der zweiten Abfrage, um die Datenstrukturen anzugleichen.
Kopiert!
title2 'Using SQL UNION ALL';
title3 'Naming the Variables';
* Append using UNION ALL;
proc sql noprint;
create table bigger as
select *
from big
union all
select Name,Sex,Age,Height,wt as Weight
from small;
quit;
proc print data=bigger;
run;
1
title2 'Using SQL UNION ALL';
2
title3 'Naming the Variables';
3
* Append using UNION ALL;
4
PROC SQL noprint;
5
create TABLE bigger as
6
select *
7
from big
8
union all
9
select Name,Sex,Age,Height,wt as Weight
10
from small;
11
QUIT;
12
PROC PRINTDATA=bigger;
13
RUN;
6 Codeblock
PROC SQL Data
Erklärung : Verwendung des Operators UNION CORR (CORResponding). SAS ordnet Spalten nach ihrem Namen und nicht nach ihrer Position zu. Spalten, die nicht in beiden Tabellen existieren, werden aus dem Ergebnis ausgeschlossen.
Kopiert!
title2 'Using SQL UNION CORR';
* Append using UNION;
proc sql noprint;
create table bigger as
select *
from big
union corr
select *
from small;
quit;
proc print data=bigger;
run;
1
title2 'Using SQL UNION CORR';
2
* Append using UNION;
3
PROC SQL noprint;
4
create TABLE bigger as
5
select *
6
from big
7
union corr
8
select *
9
from small;
10
QUIT;
11
PROC PRINTDATA=bigger;
12
RUN;
7 Codeblock
PROC SQL Data
Erklärung : Verwendung von OUTER UNION. Dieser Operator führt eine vollständige Vereinigung durch, ohne zu versuchen, Spalten zu überlagern, wenn sie nicht übereinstimmen, obwohl dies in einem einfachen SAS-SQL-Kontext oft wie ein nachsichtiges Anhängen aussieht.
Kopiert!
title2 'Using SQL OUTER UNION';
* Append using UNION;
proc sql noprint;
create table bigger as
select *
from big
outer union
select *
from small;
quit;
proc print data=bigger;
run;
1
title2 'Using SQL OUTER UNION';
2
* Append using UNION;
3
PROC SQL noprint;
4
create TABLE bigger as
5
select *
6
from big
7
outer union
8
select *
9
from small;
10
QUIT;
11
PROC PRINTDATA=bigger;
12
RUN;
8 Codeblock
PROC DATASETS
Erklärung : Verwendung von PROC DATASETS mit der APPEND-Anweisung, um Daten direkt an die Basistabelle ('big') anzuhängen, ohne die gesamte Tabelle neu zu erstellen. Der erste Versuch schlägt fehl, da die Strukturen (Variablennamen/-typen) unterschiedlich sind. Der zweite Versuch ist erfolgreich dank der Option FORCE, die das Anhängen erzwingt, indem zu lange Variablen abgeschnitten oder solche ignoriert werden, die nicht in der Basistabelle vorhanden sind.
Kopiert!
title2 'Using the APPEND Statement';
* Append using the APPEND Statement;
* This step fails because of mismatched PDVs;
proc datasets library=work nolist;
append base=big data=small;
quit;
* Use the FORCE option;
proc datasets library=work nolist;
append base=big data=small force;
quit;
proc print data=big;
run;
1
title2 'Using the APPEND Statement';
2
* Append using the APPEND Statement;
3
* This step fails because of mismatched PDVs;
4
PROC DATASETS library=work nolist;
5
append base=big DATA=small;
6
QUIT;
7
8
* Use the FORCE option;
9
PROC DATASETS library=work nolist;
10
append base=big DATA=small force;
11
QUIT;
12
PROC PRINTDATA=big;
13
RUN;
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.