jueves, 2 de julio de 2020

Integrar SAS y Python en plataforma SAS Viya

El siguiente video muestra una demo sobre la plataforma SAS Viya ( https://www.sas.com/es_es/software/viya.html ), en la que trabajando con un Notebook de Jupyter ejecutamos código SAS y Pyhton. Veremos como acceder a estructuras de datos de Python desde SAS y vicerversa, concretamente con DataFrames del paquete Pandas y con tablas SAS.
Más info:  https://online.datademy.es/    

jueves, 21 de mayo de 2020

Test de relación entre variables chi-cuadrado con SAS

Una técnica habitual de detectar posibles dependencias entre variables es la de generar tablas de frecuencias cruzadas. Este tipo de tablas nos permiten ver si las frecuencias de una determinada variable varían en base a los valores de una segunda variable. Es decir, validar si existen grupos diferenciados de frecuencias al analizar una variable en base a una segunda, ya que esto podría indicarnos que hay relación entre ambas variables. Veámoslo con un ejemplo:
Supongamos que estamos analizando las bajas de los clientes y queremos saber si existe relación entre estas bajas y el tipo de contrato de los clientes. Aquí tenemos un extracto de los datos.

En la siguiente tabla enfrentamos la variable Churn (baja) que toma dos posibles valores ‘Yes’, ‘No’ contra la variable Contract(contrato) que toma tres posibles valores: ‘Month-to-month’, ‘One year’ y ‘Two year’.

En ella vemos las frecuencias de cada grupo diferenciadas. Es decir, los clientes que hay en cada grupo. Por ejemplo, clientes que han sido baja y tienen contrato ‘Two year’ son 5. También tenemos el valor porcentual que supone esa frecuencia sobre el total, que en este caso es 0,07%. También tenemos la distribución total de clientes en los valores bajas ‘No’ y ‘Yes’, que es 72,81% frenre a 27,19%.

El código SAS para obtenerlo:

PROC FREQ DATA = WORK.CUSTOMER_CHURN_TELCO;
TABLES Contract * Churn / NOROW NOCOL NOCUM;
RUN;

Si analizamos las distribuciones de cada contrato, vemos que los clientes con contrato ‘Month-to-month’ tienen 1911 bajas frente a 1984 clientes que no han sido bajas. El porcentaje de bajas de este grupo es mucho mayor que el porcentaje de bajas de los clientes con contrato ‘One Year’ (27 vs 1478) o los de contrato ‘Two year’ (5 vs 1741). Estos datos, nos indican la posibilidad clara de que el tipo de contrato tenga una incidencia directa en las bajas y que existe una relación entre ambas variables.

En estadística existen pruebas estándar para validar de una manera formal esta dependencia con un nivel de confianza. Empleamos la prueba chi-cuadrado
Para su cálculo es necesario obtener las frecuencias esperadas (aquellas que deberían haberse observado si la hipótesis de independencia fuese cierta), y compararlas con las frecuencias observadas en la realidad. De modo general, para una tabla r x k (r filas y k columnas), se calcula el valor del estadístico chi-cuadrado con esta fórmula:

  •  Oij: Es el número de casos clasificados en la fila i de la columna j.
  •  Eij: Es el número de casos correspondientes a cada fila i y columna j. Es la frecuencia que se observaría si ambas variables fuesen independientes.
El estadístico chi-cuadrado mide la diferencia entre el valor que debiera resultar si las dos variables fuesen independientes y el que se ha observado en la realidad. Cuanto mayor sea el valor de chi-cuadrado (y, por lo tanto, la diferencia), mayor será la relación entre ambas variables.
Primero calculamos los valores esperados Eij :

Contract\ChurnNoYesTotal
Month-to-month1984 (a)1911(b)3895
One Year1478 (c)27 (d)1505
Two Year1741 (e)5 (f)1746
Total520319437146
E11 = (a+b)x(a+c+e)/n  =  2835,95
E21 = (c+d)x(a+c+e)/n = 1095,79
E12 = (a+b)x(b+d+f)/n = 1059,05
E22 = (c+d)x(b+d+f)/n = 409,21
E31= (e+f)x(a+c+e)/n = 1271,26
E33 = (e+f)x(b+d+f)/n = 474,73

El valor del estadístico chi-cuadrado, para este ejemplo en concreto, vendría dado entonces como
chi-cuadrado = (2835,95 – 1984) 2 /2835,95 + (1059,05 – 1911)2 / 1059,05 + (1095,79 – 1478)2 / 1095,79  + (409,21 – 27)2 / 409,21 + (1271,26 – 1741)2 / 1271,46 + (474,73 – 5)2  / 474,73 = 255,93 + 685,34 +  133,31 + 356,99 + 173,54 + 464,78 = 2069,89

Para calcularlo en SAS:
PROC FREQ DATA = WORK.CUSTOMER_CHURN_TELCO;
TABLES Contract * Churn /
NOROW NOCOL NOCUM
CHISQ /* Calculo del chi-cuadrado */;
RUN;

Para analizar el resultado y darle validez estadística vamos a emplear un contraste de hipótesis. (https://es.wikipedia.org/wiki/Contraste_de_hip%C3%B3tesis )
Tenemos las siguientes hipótesis:
  • H0: No hay asociación entre las bajas y el tipo de contrato. Es decir, son independientes.
  • H1: Sí existe asociación entre las variables, es decir, las bajas y el tipo de contrato están asociados.
Bajo la hipótesis nula de independencia, los valores del estadístico chi-cuadrado se distribuyen según una distribución conocida denominada ji-cuadrado, que depende de un parámetro llamado “grados de libertad”.
Para el caso de una tabla de r filas y k columnas, los grados de libertad son igual al producto del número de filas menos 1 (r-1) por el número de columnas menos 1 (k-1). Así, para nuestro caso (3-1)*(2-1) = 2. Ahora revisamos la siguiente tabla.

Esta tabla nos marca la distribución ji-cuadrado. Más información en:
https://es.wikibooks.org/wiki/Tablas_estad%C3%ADsticas/Distribuci%C3%B3n_chi-cuadrado


En la tabla anterior, se determinan los grados de libertad en la primera columna.  Así, para una seguridad del 99,9% (p =0.001) el valor teórico de una distribución ji-cuadrado con dos grados de libertad es 13,82. En nuestro ejemplo obtuvimos un valor muy superior 2069,89 de forma que podremos concluir que las dos variables no son independientes, sino que están asociadas (p<0.001). Por lo tanto, a la vista de los resultados, rechazamos la hipótesis nula (H0). Es decir, existe relación entre las bajas y el tipo de contrato.

jueves, 25 de julio de 2019

Llamar a Phyton desde SAS

Desde la versión SAS 9.4M6 (Junio 2019) es posible llamar a funciones escritas en Phyton desde un programa SAS empleando el procedimiento PROC FCMP. Este procedimiento es el compilador de funciones de SAS y se puede utilizar para crear funciones en SAS.

La forma habitual de crearlas es con código SAS, pero desde la última release es posible definir también funciones en Phyton indicando el interprete que debe usar. Podemos utilizarlos desde SAS Studio o SAS Enterprise Guide haciendo la llamada desde un programa SAS Base.




Encontramos ejemplos detallados en este link: https://blogs.sas.com/content/sgf/2019/06/04/using-python-functions-inside-sas-programs/?utm_source=linkedin_company&utm_medium=social-sprinklr&utm_content=2496387196&utm_term=2496387196


Esta nueva funcionalidad nos permite usar ambos lenguajes a la vez. En la plataforma SAS Viya hay también diferentes formas de hacerlo.

Más info: Datademy

martes, 4 de junio de 2019

El tiempo pasa...

El otro día me preguntaron cuánto tiempo llevo trabajando con datos. Una imagen vale más que mil palabras:


miércoles, 20 de febrero de 2019

Opciones depuración lenguaje macro

El trabajo con macros de SAS implica el manejo de macrovariables y de estructuras de control condicionales e iterativas, así como la gestión de pasos data o procedimientos que interactúan con lenguaje macro.




Son de gran utilidad las siguientes opciones para realizar este seguimiento:
  • symbolgen: muestra el valor que toma cada macrovariable cuando se la referencia
  • mprint: muestra el código del paso data o del procedimiento que una vez resuelto el código macro que incorpora.
  • mlogic: log relativo a las estructuras de control en lenguaje macro (condicionales y bucles)
Para activar estas opciones:
options symbolgen mprint mlogic;
A continuación una muestra del log con estas opciones activadas:


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