jueves, 26 de junio de 2014

SAS, SPSS and R: Ejemplos de componentes para tratamiento de datos en SAS, SPSS y R. Equivalencias entre herramientas (I)

Existen en el mercado numerosas herramientas para tratamiento de datos. 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, empezamos una serie, en la que mostraremos ejemplos de manipulación de datos en las tres herramientas, 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.



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

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;

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.

R:

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


Ejemplo 2. Lectura fichero Excel (.xls):

SAS:

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

SPSS:

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

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):

SAS:

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

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


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:

SAS:

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



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.


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):

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;


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.


R:

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



Ejemplo 6. Unir dos tablas:

SAS:

data tabla_union;
set tabla1 tabla2;
run;


SPSS:

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


R:


tabla_union  <- rbind(tabla1,tabla2)

Más info...


No hay comentarios:

Publicar un comentario