domingo, 14 de octubre de 2018

proc sql vs data step

Con frecuencia trabajando con SAS nos planteamos la diferencia entre usar el procedimiento proc sql frente a un paso data (data step). Existen importantes diferencias en su plan de ejecución y es conveniente conocer cuál es más apropiado para cada caso.
El  paso data se ejecuta registro a registro utilizando el PDV (program data vector) , utiliza un buffer de entrada y de salida desde donde escribe a la tabla de salida.

Fuente: www.sas.com
En el proc sql primero se ejecuta el optimizador de queries, después de sube la tabla a memoria y después se realizan los cálculos sobre la tabla completa. El resultado se escribe en la tabla de salida

                                                                                                                         Fuente: www.sas.com
Es habitual plantearse en qué casos utilizar un proc sql y en qué casos utilizar un paso data. No existe una regla general, pero si existen casos en los que uno puede ser más eficiente que el otro.

PASO DATA:
  •  Pasos que generan múltiples tablas de salida
  •  Pasos de lectura de fichero externo
  •  Pasos que precisan operaciones por grupo (first, last) u operaciones en primera fila (_N_)
  •  Pasos con muchos campos calculados o lógica de negocio compleja
  •  Procesado de tablas grandes
  •  Pasos que precisen uso de arrays
  •  Pasos que precisan de una salida selectiva (if + output)
 PROC SQL:
  •  Cuando se necesiten generar un proceso "transportable“ o en un lenguaje más genérico
  •  Pasos conoperaciones de joins, salvo masivos (hash o format) o varias tablas de salidas (merge)
  •  Pasos que precisen de acceder directamente a BBDD
  •  Pasos que acceden a tablas del diccionario 
  •  Procesado de tablas pequeñas

viernes, 7 de septiembre de 2018

SAS JSON engine

Mostramos en este post un sencillo ejemplo de uso del SAS JSON engine que nos va a permitir tratar ficheros JSON en SAS.

sas json engine
Vamos a tratar de leer un sencillo fichero:

El uso del libname JSON nos va a permitir pasar el contendido del fichero a tablas SAS dentro de la librería que asignemos. El código es el siguiente:


/* fichero json */
filename fichjs "/home/ficheros/localizaciones.json";

/* librería json  */
libname libjs JSON fileref=fichjs;

data localizaciones;
set libjs.localizaciones;
run;

La librería libjs contiene las tablas mapeadas:

La tabla localizaciones:


Vemos, por tanto, que el uso de el motor de librerías JSON facilita mucho el trabajo con este tipo de ficheros

Formación SAS


jueves, 30 de agosto de 2018

Proc SQL en SAS: plan de ejecución


SAS permite monitorizar los procesos proc SQL ejecutados. De forma similar a un SGBD muestra un plan de ejecución de las sentencias SQL que nos permite analizar y mejorar la ejecución de las mismas.



Para ello es necesario añadir el modificador _method a las sentencias proc sql.SAS muestra la secuencia de ejecución y utiliza abreviaturas para referirse a las distintas operaciones realizadas sobre las tablas.


  • SqxCRTA Create table as select
  • SqxSLCT Select
  • SqxJSL Step loop join (Cartesian)
  • SqxJM Merge Join
  • SqxINDX Index Join
  • SqxHASH Hash Join
  • SqxSORT Sort
  • SqxSRC Source rows from table
  • SqxFIL Filter rows
  • SqxSUMG Summary stats with group by
  • SqxSUMM Summary stats with NO group by

Ejemplo:
proc sql _method;
create table prueba2 as
(select * from prueba1 where hc_venta >= 5 );
quit;
NOTE: SQL execution methods chosen are:
sqxcrta
sqxsrc( WORK.PRUEBA1 )
proc sql _method;
create table prueba3 as
(select cod_articulo, sum(hc_venta) as ag_venta
from prueba1
group by cod_articulo);
quit;
NOTE: SQL execution methods chosen are:
sqxcrta
    sqxsumg
        sqxsort
            sqxsrc( WORK.PRUEBA1 )

Formación SAS

martes, 17 de julio de 2018

Acceder a un bucket S3 de Amazon desde SAS

Cada vez los orígenes de datos en nuestros análisis son más diversos. En esta ocasión compartimos un link que explica como conectarse a el almacenamiento S3 de Amazon empleando el procedimiento PROC S3 que esrá disponible desde la release m5 de SAS 9.4. Es necesario crear un fichero de configuración con las claves de acceso a S3.



Acceder a un bucket S3 desde SAS

Formación SAS

viernes, 6 de julio de 2018

e-books gratuitos SAS

Recomendamos la siguiente página que tiene interesantes libros gratuitos sobre temas tan de actualidad como el machine learning o el IOT:

https://support.sas.com/en/books/free-books.html


Formación SAS

sábado, 30 de junio de 2018

Ejemplo de redes neuronales con SAS

Existen diferentes opciones para implementar una red neuronal con SAS. Una primera opción sería emplear el módulo SAS Visual Data Mining de la plataforma SAS Viya que de forma muy visual nos permite trabajar con este tipo de algoritmos.


Una segunda opción es utilizar SAS Enterprise Miner que tiene nodos para implementar diferentes tipos de redes neuronales dentro de un workflow analítico:

En nuestro ejemplo vamos a usar el módulo SAS/STAT que mediante programación SAS BASE nos permite trabajar con redes neuronales utilizando el procedimiento PROC NEURAL
En nuestro ejemplo partimos de un fichero que contiene pruebas clínicas  donde tenemos
las variables var1 a var7 que guardan el resultado de pruebas clínicas y la variable target 1/0 indica si el paciente tiene o no la enfermedad de estudio. Queremos predecir la probabilidad de enfermedad en base a los valores de las pruebas clínicas. Como es habitual, partimos de un dataset de entrenamiento (test) y otro de validación (validar).  El código para implementarlo es el siguiente:


/* Para usar el procedimiento NEURAL necesitamos crear previamente una  data
   mining database (DMDB) que guarda info de metadata sobre los datos originales */

proc dmdb batch data = test
    out = dmtest
    dmdbcat = prucli; /*catalogo de metadata */
  var var1 - var7;
  class target;
  target target;
run;

proc dmdb batch data = validar
    out = dmvalidar
    dmdbcat = prucli; 
  var var1 - var7;
  class target;
  target target;
run;

/* Creamos el modelo */
/* Una red neuronal da mucha info en la salida por eso "nloptions noprint" está especificado */

proc neural data = test dmdbcat = prucli random = 20 /* semilla */;
  nloptions noprint;
  input var1 - var7 / level = interval; /* variables continuas */
  target target / level = nominal; /* variable nominal */
  archi MLP hidden= 2; /* arquitectura MLP=perceptron multi capa y numeros de capas ocultas */
  train maxiter = 200; /* máximo de iteraciones */
  score out = out outfit = fit; /* tabla de ajuste */
  score data = test out = resultado; /* tabla de salida con coef y predicciones */
run;

/*  Validamos el modelo */

/* Matriz de confusión: I_target: predicción y F_target = valor real */

proc sql; 
create table val as
(select F_target, I_target, count(*) as cont
from resultado
group by F_target, I_target);
quit;

miércoles, 6 de junio de 2018

People analytics ( ejemplo SAS Viya)

En el siguiente video mostramos un ejemplo de uso People analytics plataforma SAS Viya para analizar un datasets con datos de empleados. La función de RRHH cada vez se basa más en datos y aquí utilizamos diferentes módulos de la plataforma SAS Viya ( preparación dato, visual analytics y visual statistics).


Formación SAS on-line