Les données source (`mydblib.RDTAB78`) utilisées pour la création des tables de test sont générées dynamiquement au début du script à l'aide d'un DATA Step. Bien que ces tables résident dans une bibliothèque (`mydblib`) qui est configurée pour pointer vers un système de gestion de base de données (DBMS) externe via SAS/ACCESS, le contenu initial est interne au script. Le script teste la capacité de SAS à manipuler des données et à créer de nouvelles tables dans ce DBMS.
1 Bloc de code
PROC DELETE
Explication : Ce bloc supprime les tables de test `RDTAB78`, `CRTAB78A` et `CRTAB78B` de la bibliothèque `mydblib` si elles existent. Cela garantit un environnement propre pour chaque exécution du script et évite les erreurs de création de tables qui existent déjà.
Explication : Crée une table nommée `RDTAB78` dans la bibliothèque `mydblib`. Cette table est peuplée de 100 observations, où les variables `x` et `y` prennent des valeurs de 1 à 10. Cette table servira de source pour les opérations `CREATE TABLE AS SELECT` ultérieures.
Copié !
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 Bloc de code
PROC SQL Data
Explication : Ce bloc désactive l'exécution SQL directe par le SGBD (`options nodbidirectexec`). Il utilise `PROC SQL` pour créer deux nouvelles tables (`CRTAB78A` et `CRTAB78B`) dans `mydblib` à partir de `RDTAB78`. SAS exécute la logique de la clause `SELECT` en interne, sans la déléguer au SGBD. `CRTAB78A` contient la variable `y` pour toutes les observations où `x` est supérieur à 5, et `CRTAB78B` contient les valeurs distinctes de `y` pour les mêmes conditions.
Copié !
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 Bloc de code
DATA STEP Data
Explication : Ces DATA Steps copient les tables `CRTAB78A` et `CRTAB78B`, qui ont été créées sans l'exécution SQL directe, vers la bibliothèque temporaire `WORK` sous les noms `noexeA` et `noexeB`. Cela permet de les conserver pour une comparaison ultérieure.
Copié !
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 Bloc de code
PROC DELETE
Explication : Ce bloc supprime les tables `CRTAB78A` et `CRTAB78B` de la bibliothèque `mydblib`. Cette étape est nécessaire pour pouvoir recréer ces mêmes tables immédiatement après, mais cette fois avec l'option d'exécution SQL directe activée.
Explication : Ce bloc active l'exécution SQL directe par le SGBD (`options dbidirectexec`). Il utilise `PROC SQL` pour recréer les tables `CRTAB78A` et `CRTAB78B` dans `mydblib`. Contrairement au bloc précédent, SAS tente de déléguer l'exécution de la clause `SELECT` directement au SGBD sous-jacent. Cela peut potentiellement améliorer les performances en exploitant les capacités du SGBD.
Copié !
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 Bloc de code
DATA STEP Data
Explication : Ces DATA Steps copient les tables `CRTAB78A` et `CRTAB78B`, qui ont été créées avec l'exécution SQL directe, vers la bibliothèque temporaire `WORK` sous les noms `exeA` et `exeB`. Ces tables seront utilisées pour la comparaison finale.
Copié !
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 Bloc de code
PROC COMPARE
Explication : Ce bloc utilise `PROC COMPARE` pour vérifier l'équivalence entre les tables créées sans (`noexeA`, `noexeB`) et avec (`exeA`, `exeB`) l'exécution SQL directe. L'option `ERROR` signale les différences, `BRIEFSUMMARY` fournit un résumé concis des résultats de la comparaison, et `NOTE` affiche les notes générées par la procédure. L'objectif est de confirmer que les deux méthodes aboutissent aux mêmes jeux de données.
Ce matériel est fourni "tel quel" par We Are Cas. Il n'y a aucune garantie, expresse ou implicite, quant à la qualité marchande ou à l'adéquation à un usage particulier concernant le matériel ou le code contenu dans les présentes. We Are Cas n'est pas responsable des erreurs dans ce matériel tel qu'il existe maintenant ou existera, et We Are Cas ne fournit pas de support technique pour celui-ci.
Informations de Copyright : 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
Documentation liée
Aucune documentation spécifique pour cette catégorie.
SAS et tous les autres noms de produits ou de services de SAS Institute Inc. sont des marques déposées ou des marques de commerce de SAS Institute Inc. aux États-Unis et dans d'autres pays. ® indique un enregistrement aux États-Unis. WeAreCAS est un site communautaire indépendant et n'est pas affilié à SAS Institute Inc.
Ce site utilise des cookies techniques et analytiques pour améliorer votre expérience.
En savoir plus.