Veröffentlicht am :
ETL MIXTE

Verketten von SAS-Tabellen

Dieser Code ist auch verfügbar auf: English Español Français
Wartet auf Validierung
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!
1title '2.8 Appending Data Sets';
2* Create a not so big data set;
3DATA 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' THEN OUTPUT big;
9 RUN;
10DATA 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!
1title2 'Using the SET Statement';
2* Append using the SET statement;
3DATA bigger;
4 SET big small;
5 RUN;
6PROC PRINT DATA=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!
1title2 'Using SQL UNION';
2* Append using UNION;
3PROC SQL noprint;
4create TABLE bigger as
5 select *
6 from big
7 union
8 select *
9 from small;
10 QUIT;
11PROC PRINT DATA=bigger;
12RUN;
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!
1title2 'Using SQL UNION ALL';
2* Append using UNION;
3PROC SQL noprint;
4create TABLE bigger as
5 select *
6 from big
7 union all
8 select *
9 from small;
10 QUIT;
11PROC PRINT DATA=bigger;
12RUN;
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!
1title2 'Using SQL UNION ALL';
2title3 'Naming the Variables';
3* Append using UNION ALL;
4PROC SQL noprint;
5create 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;
12PROC PRINT DATA=bigger;
13RUN;
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!
1title2 'Using SQL UNION CORR';
2* Append using UNION;
3PROC SQL noprint;
4create TABLE bigger as
5 select *
6 from big
7 union corr
8 select *
9 from small;
10 QUIT;
11PROC PRINT DATA=bigger;
12RUN;
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!
1title2 'Using SQL OUTER UNION';
2* Append using UNION;
3PROC SQL noprint;
4create TABLE bigger as
5 select *
6 from big
7 outer union
8 select *
9 from small;
10 QUIT;
11PROC PRINT DATA=bigger;
12RUN;
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!
1title2 'Using the APPEND Statement';
2* Append using the APPEND Statement;
3* This step fails because of mismatched PDVs;
4PROC DATASETS library=work nolist;
5 append base=big DATA=small;
6 QUIT;
7 
8* Use the FORCE option;
9PROC DATASETS library=work nolist;
10 append base=big DATA=small force;
11 QUIT;
12PROC PRINT DATA=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.