Hay ocasiones en las que lanzamos consultas a las BBDD con SAS y necesitamos saber si son correctas. Quería plantearos un truco SAS para PROC SQL que valida las consultas antes de ser ejecutadas.

Empiezo el truco en la línea habitual: creo un dataset de ejemplo y os presento cómo realizar la validación; de este modo, vosotros podéis copiar y pegar el código en una sesión de SAS y comprobar su funcionamiento. Datos aleatorios de partida:

data datos;
    array importe(5);
    do id_cliente = 1 to 10000;
        do j = 1 to 5;
            importe(j) = rand("uniform") * 10000;
        end;
        output;
    end;
    drop j;
run;

10.000 observaciones y 6 variables. Hemos de realizar una consulta sobre esta tabla y primero hemos de validarla. Uno de los medios para realizar esta tarea es la opción NOEXEC dentro de PROC SQL:

proc sql noexec;
    create table datos1 as 
    select id_cliente,
           importe1,
           importe2
    fron datos
    where importe6 >= 5000;
quit;

NOEXEC no ha ejecutado la consulta y nos devuelve un error porque está escrito fron en vez de from. Pero NO HAY QUE EMPLEAR PARA VALIDAR LA OPCIÓN NOEXEC, lo demuestro con el siguiente código:

proc sql noexec;
    create table datos1 as 
    select id_cliente,
           importe1,
           importe2
    from datos
    where importe6 >= 5000;
quit;

Aparentemente la consulta no tiene ningún error. Sin embargo, en la cláusula where tenemos importe6, una variable que no existe. Es decir, NOEXEC sólo nos ha validado la sintaxis, no la integridad de la consulta respecto a los datos.

Así pues, nos olvidamos de NOEXEC. Para realizar validaciones completas, emplearemos la sentencia VALIDATE:

proc sql;
    validate
    /* create table datos1 as */ 
    select id_cliente,
           importe1,
           importe2
    from datos
    where importe6 >= 5000;
quit;

VALIDATE siempre precede a SELECT y no sólo nos valida la sintaxis de nuestra consulta, sino que además nos valida los campos que incluimos en ella. En el ejemplo que os he puesto, lo que hacemos es comentar CREATE TABLE y poner VALIDATE. Así podemos dejar lanzadas consultas a servidores en horario de menor concurrencia con la seguridad de que la ejecución es correcta, algo que puede ahorrar muchos sustos. Saludos.