Creación de Tabla a Través de SELECT con SAS/ACCESS

ATTENTION : Ce contenu est DÉSACTIVÉ. Il est invisible pour les visiteurs.
Nivel de dificultad
Principiante
Publicado el :
El programa comienza limpiando las tablas de prueba existentes (`RDTAB78`, `CRTAB78A`, `CRTAB78B`) en la biblioteca `mydblib`. Luego crea una tabla fuente (`mydblib.RDTAB78`) en la base de datos de destino usando un DATA Step con valores para `x` e `y`. La primera parte del ejemplo desactiva la ejecución SQL directa (`options nodbidirectexec`) y utiliza `PROC SQL` para crear dos tablas (`mydblib.CRTAB78A` y `mydblib.CRTAB78B`) realizando las uniones y filtros del lado de SAS©. Estas tablas se copian luego a la biblioteca `WORK` bajo los nombres `noexeA` y `noexeB`. Después de una limpieza intermedia de las tablas en `mydblib`, la segunda parte del script activa la ejecución SQL directa (`options dbidirectexec`) y recrea las mismas tablas (`mydblib.CRTAB78A` y `mydblib.CRTAB78B`), pero esta vez delegando la ejecución de las consultas `CREATE TABLE AS SELECT` al SGBD subyacente. Los resultados de este segundo enfoque se copian a `WORK` bajo los nombres `exeA` y `exeB`. Finalmente, el script utiliza `PROC COMPARE` para comparar las tablas resultantes de ambos enfoques (`work.noexeA` vs `work.exeA` y `work.noexeB` vs `work.exeB`) para asegurar su equivalencia, demostrando que ambos métodos producen los mismos resultados, aunque el enfoque 'pass-through' puede ser más eficiente dependiendo del SGBD.
Análisis de datos

Type : CREACIÓN_INTERNA


Los datos fuente (`mydblib.RDTAB78`) utilizados para la creación de las tablas de prueba se generan dinámicamente al inicio del script mediante un DATA Step. Aunque estas tablas residen en una biblioteca (`mydblib`) que está configurada para apuntar a un sistema de gestión de bases de datos (DBMS) externo a través de SAS/ACCESS, el contenido inicial es interno al script. El script prueba la capacidad de SAS para manipular datos y crear nuevas tablas en este DBMS.

1 Bloque de código
PROC DELETE
Explicación :
Este bloque elimina las tablas de prueba `RDTAB78`, `CRTAB78A` y `CRTAB78B` de la biblioteca `mydblib` si existen. Esto garantiza un entorno limpio para cada ejecución del script y evita errores de creación de tablas ya existentes.
¡Copiado!
1 
2PROC DELETE
3DATA=mydblib.RDTAB78;
4 
5RUN;
6PROC DELETE
7DATA=mydblib.CRTAB78A;
8 
9RUN;
10PROC DELETE
11DATA=mydblib.CRTAB78B;
12 
13RUN;
14 
2 Bloque de código
DATA STEP Data
Explicación :
Crea una tabla llamada `RDTAB78` en la biblioteca `mydblib`. Esta tabla se llena con 100 observaciones, donde las variables `x` e `y` toman valores del 1 al 10. Esta tabla servirá como fuente para las operaciones `CREATE TABLE AS SELECT` posteriores.
¡Copiado!
1DATA mydblib.RDTAB78;
2DO x = 1 to 10;
3DO y = 1 to 10;
4OUTPUT; END; END; RUN;
3 Bloque de código
PROC SQL Data
Explicación :
Este bloque desactiva la ejecución SQL directa por parte del SGBD (`options nodbidirectexec`). Utiliza `PROC SQL` para crear dos nuevas tablas (`CRTAB78A` y `CRTAB78B`) en `mydblib` a partir de `RDTAB78`. SAS ejecuta la lógica de la cláusula `SELECT` internamente, sin delegarla al SGBD. `CRTAB78A` contiene la variable `y` para todas las observaciones donde `x` es mayor que 5, y `CRTAB78B` contiene los valores distintos de `y` para las mismas condiciones.
¡Copiado!
1options nodbidirectexec;
2 
3PROC 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 Bloque de código
DATA STEP Data
Explicación :
Estos DATA Steps copian las tablas `CRTAB78A` y `CRTAB78B`, que fueron creadas sin la ejecución SQL directa, a la biblioteca temporal `WORK` bajo los nombres `noexeA` y `noexeB`. Esto permite conservarlas para una comparación posterior.
¡Copiado!
1 
2DATA work.noexeA;
3SET mydblib.CRTAB78A;
4BY y;
5 
6RUN;
7DATA work.noexeB;
8SET mydblib.CRTAB78B;
9BY y;
10 
11RUN;
12 
5 Bloque de código
PROC DELETE
Explicación :
Este bloque elimina las tablas `CRTAB78A` y `CRTAB78B` de la biblioteca `mydblib`. Este paso es necesario para poder recrear estas mismas tablas inmediatamente después, pero esta vez con la opción de ejecución SQL directa activada.
¡Copiado!
1 
2PROC DELETE
3DATA=mydblib.CRTAB78A;
4 
5RUN;
6PROC DELETE
7DATA=mydblib.CRTAB78B;
8 
9RUN;
10 
6 Bloque de código
PROC SQL Data
Explicación :
Este bloque activa la ejecución SQL directa por parte del SGBD (`options dbidirectexec`). Utiliza `PROC SQL` para recrear las tablas `CRTAB78A` y `CRTAB78B` en `mydblib`. A diferencia del bloque anterior, SAS intenta delegar la ejecución de la cláusula `SELECT` directamente al SGBD subyacente. Esto puede mejorar potencialmente el rendimiento aprovechando las capacidades del SGBD.
¡Copiado!
1options dbidirectexec;
2 
3PROC 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 Bloque de código
DATA STEP Data
Explicación :
Estos DATA Steps copian las tablas `CRTAB78A` y `CRTAB78B`, que fueron creadas con la ejecución SQL directa, a la biblioteca temporal `WORK` bajo los nombres `exeA` y `exeB`. Estas tablas se utilizarán para la comparación final.
¡Copiado!
1 
2DATA work.exeA;
3SET mydblib.CRTAB78A;
4BY y;
5 
6RUN;
7DATA work.exeB;
8SET mydblib.CRTAB78B;
9BY y;
10 
11RUN;
12 
8 Bloque de código
PROC COMPARE
Explicación :
Este bloque utiliza `PROC COMPARE` para verificar la equivalencia entre las tablas creadas sin (`noexeA`, `noexeB`) y con (`exeA`, `exeB`) la ejecución SQL directa. La opción `ERROR` señala las diferencias, `BRIEFSUMMARY` proporciona un resumen conciso de los resultados de la comparación, y `NOTE` muestra las notas generadas por el procedimiento. El objetivo es confirmar que ambos métodos resultan en los mismos conjuntos de datos.
¡Copiado!
1PROC COMPARE base=work.noexeA
2 comp=work.exeA
3 error briefsummary note;RUN;
4 
5PROC COMPARE base=work.exeB
6 comp=work.exeB
7 error briefsummary note;RUN;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
Información 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


Documentación relacionada

Aucune documentation spécifique pour cette catégorie.