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.
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!
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 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!
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 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!
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 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.
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!
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 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!
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 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.
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.
SAS y todos los demás nombres de productos o servicios de SAS Institute Inc. son marcas registradas o marcas comerciales de SAS Institute Inc. en los EE. UU. y otros países. ® indica registro en los EE. UU. WeAreCAS es un sitio comunitario independiente y no está afiliado a SAS Institute Inc.
Este sitio utiliza cookies técnicas y analíticas para mejorar su experiencia.
Saber más.