sábado, 26 de noviembre de 2016

Video tutorial: trasponer datos en SAS

Adjuntamos un nuevo videotutorial donde mediante un ejemplo vemos como trasponer datos en SAS (procedimiento proc transpose) reorganizando la estructura de la tabla pasando campos de filas a columnas.



Esperamos que os sea de utilidad.

Más info:  Formación SAS

domingo, 6 de noviembre de 2016

Detectar nulos en tablas SAS

Es frecuente la necesidad de validar y gestionar la existencia de nulos en los datos que manejamos en los procesos de análisis de reporting.


A continuación añadimos un pequeño script SAS en el que aparecen ejemplos de asignación de nulos a columnas de tablas o de la validación de los nulos. En el ejemplo se ven los casos en los que el tratamiento de nulos difiere si la columna es numérica o alfanumérica y se muestran ejemplos de funciones útiles tales como: missing(), nmiss() y cmiss(). Igualmente se muestra alguna diferencia que existe entre validar nulos en una sentencia condicional if o en una clausula where. Esperamos sea de utilidad y nos sirva como breve compendio que nos evite los problemas comunes en la detección de nulos.

/* Validar nulos: diferentes opciones */

/* Tabla con campos nulos. Asignación de nulos */

data tabinput;
length campo1 $10 campo2 8.;
campo1 = ""; /* asignar nulos en alfanuméricos */
campo2 = 3;
output;
campo1 = "b";
campo2 = .; /* asignar nulo en numéricos */
output;
campo1 = "a";
campo2 = 5;
output;
run;

data validar_nulos;
set tabinput;
where campo1 is missing; /* funciona en un where pero no en un if */
run;

data validar_nulos;
set tabinput;
where campo1 is null; /* funciona en un where pero no en un if */
run;

data validar_nulos;
set tabinput;
if campo1 eq ""; /* validar nulos en alfanuméricos */
run;


data validar_nulos;
set tabinput;
if campo2 eq .; /* validar nulos en numéricos */
run;

data validar_nulos;
set tabinput;
if missing(campo1); /* función missing valida para alfanuméricos y numéricos */
run;

data validar_nulos;
set tabinput;
if nmiss(campo2) = 1 ; /* contador de missings valida para numéricos */
run;

data validar_nulos;
set tabinput;
if cmiss(campo1) = 1 ; /* contador de missings valida para numéricos y alfanuméricos */
run;

Más info en:

Formación SAS

martes, 25 de octubre de 2016

Estandarización de variables en SAS

Un paso muy habitual en los procesos de analítica es la estandarización o normalización de variables.  La normalización o estandarización es una técnica muy útil a la hora de comparar datos de diferentes distribuciones o que estén en unidades de medida diferentes.
Consiste en aplicar un cálculo sencillo a la variable objeto de estudio, de forma que conseguimos que los datos de la distribución normalizada tengan una media aritmética de 0 y una desviación típica de 1. 

Z i= (Xi - media aritmética)/(desv. típica)
Zi es el valor normalizado y lo obtenemos restando a cada valor original  Xi   la media aritmética y dividiendo el resultado por la desviación típica

Es un paso previo que puede ser necesario en alguno algoritmos tales como la clusterización o las redes neuronales.

Para realizar este proceso en SAS nos basamos en el procedimiento proc standard.
Partimos del siguiente dataset de entrada:


Nos interesa estandarizar las variables: edad, antiguedad y consumo_yyyymm. Para ello:

data clientes1;
set clientes;
s_edad = edad;
s_antiguedad = antiguedad;
s_consumo_201601 = consumo_201601;
s_consumo_201602 = consumo_201602;
s_consumo_201603 = consumo_201603;
run;

PROC STANDARD DATA=clientes1 MEAN=0 STD=1 OUT=clientes2;
  VAR s_edad s_antiguedad s_consumo_201601 s_consumo_201602 s_consumo_201603 ;
RUN;

Tal y como hemos realizado el proceso mantiene las antiguas variables y crea las nuevas estandarizadas:


El proceso también se puede realizar sin necesidad de escribir código utilizando la tarea correspondiente de Enterprise Guide.




Más info en:

Formación SAS

viernes, 23 de septiembre de 2016

Integrar SAS y R. Procedimiento proc_R

Vimos en una entrada anterior, como integrar SAS y R de diferentes formar:

Ejecutar script R desde SAS

En esta entrada, recomendamos otra forma de hacerlo basada en la macro proc_R:



Para ello es necesario descargar la macro: macro proc_R  y seguir los pasos que se indican en el siguiente post:

run R from SAS

Aprovechamos para recomendar la página www.listendata.com/ , donde es posible encontrar múltiples recursos de SAS.

lunes, 5 de septiembre de 2016

Videotutorial introducción a la importación de datos y constructor de queries con SAS

Adjunto link sobre el video que he generado sobre cómo realizar una importación de datos en SAS




y un posterior paso para tratar la información importada con el constructor de queries:


Más info en:

Formación SAS

jueves, 25 de agosto de 2016

Descomposición de series temporales con SAS

En este post vamos a ver un caso práctico de descomposición de series temporales con SAS. Inicialmente introducimos el concepto de serie temporal y su descomposición:

Una serie temporal se define como una colección de observaciones de una variable recogidas secuencialmente en el tiempo. Este tipo de datos son útiles cuando se quiere predecir la evolución de una variable que cambia a lo largo del tiempo. Las series temporales pueden mostrar una gran variedad de patrones. Suele ser útil descomponer una serie en partes, de forma de cada parte represente una parte del comportamiento:

Tendencia: incremento o decremento sostenido a medio o largo plazo en la serie
Estacionalidad: efectos estacionales (momento del año, mes, día de la semana..)
Ciclos: Subidas y bajadas variables e inestables sin aparente periodicidad fija. Puede ser ruido o puede contener información.



Podemos trabajar con series temporales en SAS en distintos módulos: SAS Enterprise Guide, SAS Visual Analytics, SAS Forecast Studio, etc..., el ejemplo que vamos a plantear puede realizarse con SAS Enterprise Guide utilizando procedimientos de SAS/ETS

El siguiente código SAS/BASE nos permite crear nuestro dataset de ejemplo:

data tabpre (keep =  periodo_f periodo val);
length mm $2. periodo $8.;
do a = 2013 to 2016;
if a = 2016 then tope = 6; else tope = 12;
do m = 1 to tope;
mm=put(m,z2.);
periodo = compress(a||mm||'01');
periodo_f = mdy(input(substr(put(periodo,8.),5,2),8.) ,input(substr(put(periodo,8.),7,2),8.) ,input(substr(put(periodo,8.),1,4),8.) );
ten = (a - 2000)*100;
val = ten + round(100*ranuni(1));
if m = 1 then val = 1.35*val;if m = 2 then val = 1.15*val;
if m = 3 then val = 1.22*val;if m = 4 then val = 1.05*val;
if m = 5 then val = 1*val;if m = 6 then val = 0.9*val;
if m = 7 then val = 0.85*val;if m = 8 then val = 0.8*val;
if m = 9 then val = 1.1*val;if m = 10 then val = 1.05*val;
if m = 11 then val = 1.24*val;if m = 12 then val = 1.3*val;
FORMAT periodo_f MONYY5.;
output;
end;
end;
run;

Una vez creado este dataset podemos ver la serie gráficamente empleando el procedimiento gplot:

proc gplot data=tabpre;
plot val*periodo_f;
run;


A simple vista comprobamos que los datos representan un negocio estacional con correlación interanual, vemos pico en ene-dic y valle en jul-ago, hay tendencia alcista a lo largo de los años.

Es interesante analizar la autocorrelación de la serie. Decimos que en una serie temporal hay autocorrelación cuando existe una correlación entre un periodo dado y periodos anteriores a este.

PROC AUTOREG data=tabpre; 
MODEL val = periodo_f / NLAG=12; 
run;


Encontramos una correlación positiva alta en t - 12 (interanual) y una correlación negativa alta en t-5 , t-6 y t -7, tal y como se intuía en la gráfica anterior.

Vamos a descomponer la serie en tendencia, estacionalidad y parte irregular. Para ello empleamos el procedimiento proc timeseries.

ods graphics on;
proc timeseries data=tabpre
                   out=series
                   outtrend=trend
                   outseason=season plots=(sc tc ic acf iacf);
  /* sc: estacional tc: tendencia ic: irregular acf: autocorrelacion */
      id periodo_f interval=month ;
      var val;
run;
ods graphics off;

La salida de este procedimiento nos muestra la descomposición de la serie:







El procedimiento proc timeseries nos puede dar más información útil de la serie temporal que en pasos posteriores puede ser utilizada para modelizar.

Más información en: Formación SAS




lunes, 27 de junio de 2016

Convocatoria cursos SAS en Septiembre

Próximas convocatoria del curso de SAS/BASE y Enterprise Guide en Madrid:






- Intensivo fin de semana (viernes tarde + sábado mañana): 9/10 Sept y 16/17  Sept . 20h


Profesorado: Consultores senior Business Intelligence ( > 15 años experiencia) con dilatada experiencia en SAS

Interesados: formacion@datademy.es

Localización: Madrid (zona metro Diego de León). Precio: 500 euros (descuento 40% para desempleados)

Es una formación muy práctica y el objetivo es conocer mediante la introducción de conceptos y la realización de ejercicios prácticos la herramienta SAS/Enterprise Guide y la programación SAS/BASE.

Perfiles a los que puede interesar:

- Consultores business intelligence
- Data scientists
- Actuarios de seguros
- Analistas de riesgos
- Perfil investigación: bioestadísticos, físicos, quimicos, etc..

No es necesario tener conocimientos iniciales en SAS, aunque es útil conocer a nivel básico el lenguaje SQL.

A las personas que hayan realizado un aprovechamiento óptimo del curso y estén interesadas en una oportunidad profesional o bien un cambio, se les facilitará una entrevista de trabajo con empresas interesadas en perfiles SAS.

Igualmente se ofrecerá orientación de carrera a aquellas personas que quieran orientar su perfil hacia el data science.

Interesados escribir a: formacion@datademy.es


Temario:

Programación SAS 1. Introducción a SAS
·         Introducción a SAS:
o        Soluciones Business Intelligence SAS
o        Capacidades SAS/BASE. Visión general.
·         Entorno trabajo SAS/BASE:
o        Acceso versión SAS for academics (entorno Cloud)
o        Inicio de sesión
o        Program editor
o        Ventanas log y output
o        Gestión de librerías y directorios
·         Acceso a fuentes de datos:
o        Lectura de ficheros planos (posiciones, delimitados)
o        Lectura de ficheros Excel
o        Acceso a bases de datos
·         Manejar tablas SAS. Crear informes lista:
o        Explorar tablas SAS
o        Indentificar observaciones
o        Salida en output (sentencia print).
·         Programar pasos DATA:
o        Leer conjuntos de datos SAS y crear variables
o        Procesos condicionales
o        Gestionar variables (sentencias keep y drop)
o        Filtrar observaciones (sentencias where)
·         Combinar conjuntos de datos:
o        Unir conjuntos de datos SAS (sentencia set)
o        Combinar conjuntos de datos SAS (sentencia merge)
·         Agregación de conjuntos de datos:
o        Procedimientos de agregación (procedimientos means y summary)
o        Manejo de informes (procedimientos report y tabulate)
·         Salidas de conjuntos de datos:
o        Personalizar la apariencia, aplicar formatos (sentencias title, footnote, proc format)
o        Crear informes HTML
Programación SAS 2.  Gestión de datos
·         Programación de pasos DATA:
o        Escribir en muchos conjuntos de datos SAS 
o        Escribir a la salida varias observaciones (sentencia ouput)
o        Escribir en un fichero de datos externo (sistema ods)
o        Filtrar observaciones en entrada y en salida. Diferencias if vs where.
·         Tratamiento de conjuntos de datos con sql:
o        Utilización de sql en SAS (procedimiento sql)
o        Unir y combinar conjuntos de datos SAS con sql
o        Agregaciones de conjuntos de datos SAS con sql
o        Extracción de datos y volcado a bases de datos externas
·         Agregación de conjuntos de datos:
o        Suma acumulada para un grupo de datos
o        Manejo de grupos de observaciones ( sentencias first, last, retain)
·         Transformaciones en los datos y funciones:
o        Manipular valores alfanuméricos
o        Manipular valores numéricos
o        Manipular fechas
o        Cambiar tipo de variables
o        Funciones tratamiento alfanuméricos, numéricos y fechas
·         Procesar datos de forma iterativa:
o        Tipos de bucles (sentencia do y while)
o        Arrays SAS
·         Empleo de procedimientos:
o        Procedimientos generalistas de utilidad (contents, compare, etc..)
o        Procedimientos estadísticos (freq, univariate, etc..)
·         Técnicas depuración de errores:
o        Uso de la sentencia PUT
o        Uso de la opción DEBUG
·         Introducción a los gráficos:
o        Diagramas de barras y circulares (GCHART)
o        Perfeccionar la salida

Programación SAS 3.  Programación macro
·         Visión general de las macros:
o        Aplicaciones habituales de las macros
o        Procesado de las macros
·         Creación de macrovariables:
o        Conceptos básicos
o        Creación de macrovariables en paso DATA
o        Inferfaz SQL y macrovariables
o        Obtención de valores en ejecución
·         Macro programas:
o        Estructura básica y definición
o        Parámetros de una macro
o        Proceso condicional
o        Procesos iterativos
o        Operaciones aritméticas y lógicas
o        Inferfaz SQL y macrovariables
·         Técnicas de almacenamiento de macros:
o        Sentencia %INCLUDE
o        Autocall
o        Almacenamiento de macros compiladas