Die Quelldaten (`mydblib.RDTAB78`), die zur Erstellung der Testtabellen verwendet werden, werden zu Beginn des Skripts dynamisch mit einem DATA Step generiert. Obwohl diese Tabellen in einer Bibliothek (`mydblib`) liegen, die so konfiguriert ist, dass sie über SAS/ACCESS auf ein externes Datenbankverwaltungssystem (DBMS) verweist, ist der ursprüngliche Inhalt intern zum Skript. Das Skript testet die Fähigkeit von SAS, Daten in diesem DBMS zu manipulieren und neue Tabellen zu erstellen.
1 Codeblock
PROC DELETE
Erklärung : Dieser Block löscht die Testtabellen `RDTAB78`, `CRTAB78A` und `CRTAB78B` aus der Bibliothek `mydblib`, falls sie existieren. Dies gewährleistet eine saubere Umgebung für jede Skriptausführung und vermeidet Fehler bei der Erstellung bereits vorhandener Tabellen.
Erklärung : Erstellt eine Tabelle namens `RDTAB78` in der Bibliothek `mydblib`. Diese Tabelle wird mit 100 Beobachtungen gefüllt, wobei die Variablen `x` und `y` Werte von 1 bis 10 annehmen. Diese Tabelle dient als Quelle für spätere `CREATE TABLE AS SELECT`-Operationen.
Kopiert!
data mydblib.RDTAB78;
do x = 1 to 10;
do y = 1 to 10;
output; end; end; run;
1
DATA mydblib.RDTAB78;
2
DO x = 1 to 10;
3
DO y = 1 to 10;
4
OUTPUT; END; END; RUN;
3 Codeblock
PROC SQL Data
Erklärung : Dieser Block deaktiviert die direkte SQL-Ausführung durch das DBMS (`options nodbidirectexec`). Er verwendet `PROC SQL`, um zwei neue Tabellen (`CRTAB78A` und `CRTAB78B`) in `mydblib` aus `RDTAB78` zu erstellen. SAS führt die Logik der `SELECT`-Klausel intern aus, ohne sie an das DBMS zu delegieren. `CRTAB78A` enthält die Variable `y` für alle Beobachtungen, bei denen `x` größer als 5 ist, und `CRTAB78B` enthält die eindeutigen Werte von `y` für dieselben Bedingungen.
Kopiert!
options nodbidirectexec;
proc sql noerrorstop;
create table mydblib.CRTAB78A as
select y from mydblib.RDTAB78
where x gt 5 order by y;
/* WITH IP TRIGGER */
create table mydblib.CRTAB78B as
select distinct y from mydblib.RDTAB78
where x gt 5 order by y;
quit;
1
options nodbidirectexec;
2
3
PROC SQL noerrorstop;
4
5
create TABLE mydblib.CRTAB78A as
6
select y from mydblib.RDTAB78
7
where x gt 5 order BY y;
8
9
/* WITH IP TRIGGER */
10
create TABLE mydblib.CRTAB78B as
11
select distinct y from mydblib.RDTAB78
12
where x gt 5 order BY y;
13
14
QUIT;
4 Codeblock
DATA STEP Data
Erklärung : Diese DATA Steps kopieren die Tabellen `CRTAB78A` und `CRTAB78B`, die ohne direkte SQL-Ausführung erstellt wurden, in die temporäre Bibliothek `WORK` unter den Namen `noexeA` und `noexeB`. Dies ermöglicht es, sie für einen späteren Vergleich aufzubewahren.
Kopiert!
data work.noexeA; set mydblib.CRTAB78A; by y; run;
data work.noexeB; set mydblib.CRTAB78B; by y; run;
1
2
DATA work.noexeA;
3
SET mydblib.CRTAB78A;
4
BY y;
5
6
RUN;
7
DATA work.noexeB;
8
SET mydblib.CRTAB78B;
9
BY y;
10
11
RUN;
12
5 Codeblock
PROC DELETE
Erklärung : Dieser Block löscht die Tabellen `CRTAB78A` und `CRTAB78B` aus der Bibliothek `mydblib`. Dieser Schritt ist notwendig, um dieselben Tabellen unmittelbar danach neu erstellen zu können, diesmal jedoch mit aktivierter Option für die direkte SQL-Ausführung.
Erklärung : Dieser Block aktiviert die direkte SQL-Ausführung durch das DBMS (`options dbidirectexec`). Er verwendet `PROC SQL`, um die Tabellen `CRTAB78A` und `CRTAB78B` in `mydblib` neu zu erstellen. Im Gegensatz zum vorherigen Block versucht SAS, die Ausführung der `SELECT`-Klausel direkt an das zugrunde liegende DBMS zu delegieren. Dies kann die Leistung potenziell verbessern, indem die Fähigkeiten des DBMS genutzt werden.
Kopiert!
options dbidirectexec;
proc sql noerrorstop;
create table mydblib.CRTAB78A as
select y from mydblib.RDTAB78
where x gt 5 order by y;
create table mydblib.CRTAB78B as
select distinct y from mydblib.RDTAB78
where x gt 5 order by y;
quit;
1
options dbidirectexec;
2
3
PROC SQL noerrorstop;
4
5
create TABLE mydblib.CRTAB78A as
6
select y from mydblib.RDTAB78
7
where x gt 5 order BY y;
8
9
10
11
create TABLE mydblib.CRTAB78B as
12
select distinct y from mydblib.RDTAB78
13
where x gt 5 order BY y;
14
15
QUIT;
7 Codeblock
DATA STEP Data
Erklärung : Diese DATA Steps kopieren die Tabellen `CRTAB78A` und `CRTAB78B`, die mit direkter SQL-Ausführung erstellt wurden, in die temporäre Bibliothek `WORK` unter den Namen `exeA` und `exeB`. Diese Tabellen werden für den abschließenden Vergleich verwendet.
Kopiert!
data work.exeA; set mydblib.CRTAB78A; by y; run;
data work.exeB; set mydblib.CRTAB78B; by y; run;
1
2
DATA work.exeA;
3
SET mydblib.CRTAB78A;
4
BY y;
5
6
RUN;
7
DATA work.exeB;
8
SET mydblib.CRTAB78B;
9
BY y;
10
11
RUN;
12
8 Codeblock
PROC COMPARE
Erklärung : Dieser Block verwendet `PROC COMPARE`, um die Äquivalenz zwischen den Tabellen zu überprüfen, die ohne (`noexeA`, `noexeB`) und mit (`exeA`, `exeB`) direkter SQL-Ausführung erstellt wurden. Die Option `ERROR` signalisiert Unterschiede, `BRIEFSUMMARY` liefert eine prägnante Zusammenfassung der Vergleichsergebnisse und `NOTE` zeigt die von der Prozedur generierten Anmerkungen an. Ziel ist es, zu bestätigen, dass beide Methoden zu denselben Datensätzen führen.
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 : SAS SAMPLE LIBRARY, NAME: createTableAsSelect.sas, TITLE: Sample Programs, PRODUCT: SAS/ACCESS Software for Relational Databases, SYSTEM: z/OS, UNIX, WINDOWS, REF: SAS/ACCESS 9 for Relational Databases: Reference
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.