Data science: equivalencias entre SAS, SPSS y R

Publié le - Dernière modification le

Existen en el Mercado numerosas herramientas para tratamiento de datos en actividades de data science. En este post, nos vamos a centrar en algunas de las más utilizadas: SAS, SPSS y R. Sin entrar a valorar la mejor o peor adecuación de cada una de ellas al tipo de proyecto en el que trabajemos, sus ventajas o sus inconvenientes,  lo que es evidente es que son tres herramientas muy extendidas. En este post, mostraremos ejemplos de manipulación de datos en las tres herramientas (hasta 19 casos), con objeto de tener el mismo código traducido a las tres herramientas. Estos ejemplos pretenden ser de ayuda para que usuarios de una de las tres herramientas puedan empezar a conocer las otras dos o también como ayuda en un proyecto de migración de procesos de una herramienta a otra.   logos_sas_spss_r  

Ejemplo 1. Obtener datos de una BBDD vía ODBC:

Mediante SAS

proc sql; connect to odbc(dsn=dm_demo uid=user pwd=****); create table tabla1 as select * from connection to odbc( select * from tabla_bbdd ); quit;

Con la ayuda de SPSS

*tabla1.sps. GET DATA /TYPE=ODBC /CONNECT= 'DSN=MS Access Database;DBQ=/examples/data/dm_demo.mdb;'+ 'DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;' /SQL = 'SELECT * FROM tabla_bbdd'. EXECUTE.

Con la herramienta R

library(RODBC) conndb <- odbcConnect("dsn1", uid = "user", pwd = "****") tabla1 <- sqlQuery(conndb,"SELECT * FROM tabla_bbdd").

Ejemplo 2. Lectura fichero Excel (.xls)

Mediante SAS

proc import datafile='C:\temp\datos_excel.xls' dbms=excel2000 replace out=tabla_excel; sheet="Hoja1"; range="A2:I15"; getnames=yes; run;

Con la ayuda de SPSS

*tabla_excel.sps. GET DATA /TYPE=XLS /FILE='C:\temp\datos_excel.xls' /SHEET=NAME 'Hoja1' /CELLRANGE=RANGE 'A2:I15' /READNAMES=on .

Con la herramienta R

tabla_excel <- read.table("C:/temp/datos_excel.csv", header=TRUE, sep=";", na.strings="NA", dec=".", strip.white=TRUE)

Ejemplo 3. Lectura fichero plano (txt)

Mediante SAS

data tabla_entrada; infile 'C:\temp\entrada.txt' dlm = ';' ; input  cod_cliente:8. des_cliente:$20.; run;

Con la ayuda de SPSS

*table_entrada.sps. GET DATA /TYPE = TXT /FILE = 'C:\temp\entrada.txt' /DELIMITERS = ";" /QUALIFIER = '"' /ARRANGEMENT = DELIMITED /FIRSTCASE = 2 /VARIABLES = cod_cliente F1 des_cliente A20

Con la herramienta R

tabla_entrada <- read.table("C:/temp/entrada.txt", header=FALSE, sep=";", na.strings="NA", dec=".", strip.white=TRUE) nombres<-c("cod_cliente","des_cliente")  /* nombres de los campos */ names(tabla_entrada)<-nombres

Ejemplo 4. Crear tabla

Mediante SAS

data tabla1; input cod_cliente des_cliente $  arpu  ; datalines; 1 JVG 25 2 PAF 40 3 AAG 35 ; run;

Con la ayuda de SPSS

DATA LIST LIST / cod_cliente des_cliente (A10) arpu. BEGIN DATA. 1 JVG 25 2 PAF 40 3 AAG 35 END DATA. SAVE OUTFILE = "tabla1.sav". LIST.

Con la herramienta R

cod_cliente <- c(1,2,3) des_cliente <- c("JVG","PAF","AAG") arpu <- c(25,40,35) tabla1 <- data.frame(cod_cliente, des_cliente, arpu)

Ejemplo 5. Cruce de tablas (merge)

Mediante SAS

proc sort data=tabla1; by cod_cliente; run; proc sort data=tabla2; by cod_cliente; run; data tabla_merge; merge tabla1 tabla2; by cod_cliente; run;

Con la ayuda de SPSS

GET FILE='C:\temp\tabla1.sav'. SORT CASES BY cod_cliente. DATASET NAME tabla1 GET FILE='C:\temp\tabla2.sav'. SORT CASES BY cod_cliente. DATASET NAME tabla2. MATCH FILES /FILE=* /FILE='tabla1' /FILE='tabla2' /BY cod_cliente. EXECUTE.

 Con la herramienta R

tabla_merge <- merge(tabla1, tabla2, all=FALSE, by="cod_cliente")

Ejemplo 6. Unir dos tablas (append)

Mediante SAS

data tabla_union; set tabla1 tabla2; run;

Con la ayuda de SPSS

*tabla_union.sps. ADD FILES /FILE = 'C:\temp\tabla1.sav' /FILE = 'C:\temp\tabla2.sav' EXECUTE.

Con la herramienta R

tabla_union  <- rbind(tabla1,tabla2)

Ejemplo 7. Obtener agregados

Mediante SAS

proc summary data=tabla1 noprint nway; class cod_cliente ; output out=tabla_ag(drop=_type_ _freq_) sum(arpu) = suma_arpu mean(arpu) = media_arpu ; run;

Con la ayuda de SPSS

aggregate outfile 'c:\temp\tabla_ag.sav' /break cod_cliente /suma­_arpu = sum(arpu). /media_arpu = mean(arpu) get file 'c:\temp\tabla1.sav'. list.

Con la herramienta R

tabla_ag <- aggregate(tabla1["arpu"], by=list(cod_cliente=tabla1$cod_cliente), FUN=sum)

Ejemplo 8. Eliminar duplicados

Mediante SAS

proc sort data=tabla1 nodupkeys; by cod_cliente; run;

Con la ayuda de SPSS

GET FILE='C:\temp\tabla1.sav'. SORT CASES BY cod_cliente . MATCH FILES /FILE = * /BY cod_cliente /LAST = ultimo . FILTER BY ultimo . EXECUTE.

Con la herramienta R

tabla1_uniq <- unique(tabla1)

Ejemplo 9. Recodificación variables

Mediante SAS

data tabla2; set tabla1; if arpu >= 0 and arpu <= 10 then do; grupo_arpu = 1; end; else do; if arpu > 10 and arpu <= 20 then do; grupo_arpu = 2; end; else do; grupo_arpu = 3; end; end; run;

Con la ayuda de SPSS

GET FILE='C:\temp\tabla1.sav'.
RECODE arpu (lo thru 10=1) (11 thru 20=2) (21 thru hi=3) into grupo_arpu.
EXECUTE. SAVE OUTFILE = 'C:\temp\tabla2.sav'.

Con la herramienta R

tabla1$grupo_arpu[tabla1$arpu>=0 & tabla1$arpu <= 10 ] <- 1 tabla1$grupo_arpu[tabla1$arpu>10 & tabla1$arpu <= 20 ] <- 2 tabla1$grupo_arpu[tabla1$arpu>20 ] <- 3

 Ejemplo 10. Renombrar variables

Mediante SAS

data tabla1(rename=(cod_cliente=id_cliente)); set tabla1; run;

Con la ayuda de SPSS

GET FILE='C:\temp\tabla1.sav'. RENAME VARIABLES (cod_cliente = id_cliente). EXECUTE. SAVE OUTFILE = 'C:\temp\tabla2.sav'.

Con la herramienta R

colnames(tabla1)[colnames(tabla1)=="cod_cliente"] <- "id_cliente"

Ejemplo 11. Funciones aritméticas

Mediante SAS

data tabla_num; input var1-var4; resto= mod(var4,3); media = mean(of var1-var4); media_ent = int(media); cards; 1 . 3 4 5 6 7 8 9 . . 12 ; run;

Con la ayuda de SPSS

DATA LIST LIST (",") /var1 var2 var3 var4. BEGIN DATA 1, , 3, 4 5, 6, 7, 8 9, , , 12 END DATA. COMPUTE resto = MOD(var4, 3). COMPUTE media = MEAN.3(var1, var2, var3, var4). COMPUTE media_ent = TRUNC(MEAN(var1 TO var4)). EXECUTE. SAVE OUTFILE = 'C:\temp\tabla_num.sav'.

Con la herramienta R

tabla1$media <- (tabla1$var1 + tabla1$var2 + tabla1$var3 + tabla1$var4)/4 tabla1$resto <- tabla1$var4 %% 3 tabla1$media_ent <- trunc(tabla1$media)

Ejemplo 12. Funciones tratamiento texto

Mediante SAS

data tabla_car; length cadena $50. set tabla_num; cadena = cat(var1,"-",var2,"-",var3); run;

Con la ayuda de SPSS

GET FILE='C:\temp\tabla_num.sav'. STRING cadena (A50). COMPUTE cadena = CONCAT((STRING(var1)), "-",(STRING(var2)), "-",(STRING(var3))). EXECUTE. SAVE OUTFILE = 'C:\temp\tabla_car.sav'. Con la herramienta R tabla1$cadena = paste(tabla1$var1, tabla1$var2, tabla1$var3, sep='-')

 Ejemplo 13. Tratamiento de fechas

Mediante SAS

data fechas; infile cards ; input fecha_inicio : MMDDYY10. fecha_fin : MMDDYY10.; dias=fecha_fin-fecha_inicio; cards; 3/01/2014 4/06/2014 3/02/2014 4/06/2014 3/06/2014 4/06/2014 ; run;

Con la ayuda de SPSS

DATA LIST LIST /fecha_inicio (ADATE12) fecha_fin (ADATE12) BEGIN DATA 3/01/2014 4/06/2014 3/02/2014 4/06/2014 3/06/2014 4/06/2014 END DATA. COMPUTE dias = CTIME.DAYS(fecha_fin – fecha_inicio). EXECUTE. SAVE OUTFILE = 'C:\temp\fechas.sav'.

Con la herramienta R

fecha_ini <- c(as.Date('03/01/2014',format='%d/%m/%Y'),as.Date('03/02/2014',format='%d/%m/%Y'),as.Date('03/06/2014',format='%d/%m/%Y')) fecha_fin <- c(as.Date('04/06/2014',format='%d/%m/%Y'),as.Date('04/06/2014',format='%d/%m/%Y'),as.Date('04/06/2014',format='%d/%m/%Y')) tabla_fecha <- data.frame(fecha_ini, fecha_fin) tabla_fecha$dias = tabla_fecha$fecha_fin - tabla_fecha$fecha_ini

Ejemplo 14. Filtrado de datos (where)

Mediante SAS

data tabla_filtro; set tabla1; where arpu > 10; run;

Con la ayuda de SPSS

GET FILE='C:\temp\tabla1.sav'. SELECT IF(arpu > 10). SAVE OUTFILE='C:\temp\tabla_filtro.sav'. EXECUTE.

Con la herramienta R

tabla_filtro <-subset(tabla1, arpu > 10)

Ejemplo 15. Selección de variables (keep)

Mediante SAS

data tabla_keep (keep = cod_cliente arpu); set tabla1; run;

Con la ayuda de SPSS

GET FILE='C:\temp\tabla1.sav'. SAVE OUTFILE='c:\temp\tabla_filtro.sav' /KEEP=cod_cliente,arpu. EXECUTE.

Con la herramienta R

tabla_keep <- tabla1[c("cod_cliente", “arpu”)]

Ejemplo 16. Ordenar tabla (sort)

Mediante SAS

proc sort data=tabla1 out=tabla_ord; by cod_cliente; run;

Con la ayuda de SPSS

GET FILE='C:\temp\tabla1.sav'. SORT CASES BY ID_CLIENTE. SAVE OUTFILE='c:\temp\tabla_ord.sav'. EXECUTE.

Con la herramienta R

tabla_ord  <-  tabla1[order(tabla1$cod_cliente, ]

Ejemplo 17.  Estructuras condicionales (if)

Mediante SAS

data tabla1; set tabla1; if arpu <= 10 then arpu_g = 1; else arpu_g = 2; run;

Con la ayuda de SPSS

GET FILE=("c:\temp\tabla1.sav") COMPUTE arpu_g=2. IF (arpu <= 10 ) arpu_g=1. SAVE OUTFILE='c:\temp\tabla1.sav'. EXECUTE.

Con la herramienta R

tabla_sal$arpu_g <- ifelse( arpu >= 10, 1,2)

Ejemplo 18.  Exportar a fichero plano (txt)

Mediante SAS

data _null_; set  tabla1; file 'C:\temp\salida.txt' ; informat cod_cliente 8. arpu 8.; put cod_cliente arpu; run;

Con la ayuda de SPSS

GET FILE=("c:\temp\tabla1.sav") SAVE TRANSLATE OUTFILE='C:\temp\salida.txt' /TYPE=TAB /MAP /REPLACE /FIELDNAMES /CELLS=VALUES.

Con la herramienta R

write.table(tabla1, file = "C:/temp/salida.txt")

Ejemplo 19.  Exportar a csv

Mediante SAS

proc export data=tabla1 outfile="C:\temp\salida.csv" dbms= csv replaces; putnames=yes; run;

Con la ayuda de SPSS

GET FILE=("c:\temp\tabla1.sav") SAVE TRANSLATE OUTFILE='C:\temp\salida.csv' /TYPE=CSV /MAP /REPLACE /FIELDNAMES /CELLS=VALUES.

Con la herramienta R

write.csv(tabla1, file=" C:/temp/salida.csv";)  

Article suivant

"Todo el mundo debería saber programar"