Professional Documents
Culture Documents
Las variables que pueden aparecer en un conjunto de datos pueden ser de varios
tipos:
Continuas: son aquellas cuyos valores pueden ser cualquier número real de
un intervalo dado. Lo único que limita el valor de estas variables, es la
capacidad de medirlas con exactitud. En SPSS se llaman Escalas.
Ordinales: son aquellas que sólo pueden tomar un número finito ó infinito
numerable de valores y entre ellos existe un orden.
Nominales, como el sexo, la raza, el color,... Pueden tomar un número finito de
valores y entre ellos, no se puede establecer ningún tipo de orden. También
las llamaremos cualitativas o categóricas y a los posibles valores que tomen les
daremos el nombre de categorías.
Destacamos además variables específicas que suelen aparecer en multitud de
conjuntos de datos:
Escalas de Likert es una declaración que se le hace a los sujetos para que éstos
evalúen en función de su criterio subjetivo; generalmente se pide a los sujetos que
manifiesten su grado de acuerdo o desacuerdo. Normalmente hay 5 posibles
respuestas o niveles de acuerdo o desacuerdo, aunque algunos evaluadores prefieren
utilizar 7 ó 9 niveles; un estudio empírico reciente demostró que la información
obtenida en escalas con 5, 7 y 10 niveles posibles de respuesta muestra las mismas
1
Estudio y depuración de datos Tema 1
Me gusta el cine:
1. Totalmente en desacuerdo
2. En desacuerdo
3. Ni de acuerdo ni en desacuerdo
4. De acuerdo
5. Totalmente de acuerdo
Fechas: Muy importante sobre todo en el estudio de las series temporales. Por su
formato distinto suelen tener un tratamiento específico dentro de los programas.
En general un conjunto de datos se representará por una matriz en la que todos los
valores de una variable vendrán incluidos en una columna; cada una de las filas hará
referencia a una de las observaciones.
Para hacer un primer análisis del tipo de variables que tenemos en nuestro fichero de
datos, en SPSS tenemos la opción Datos- Definir propiedades de las variables que
nos permite escanear las variables para ver de una forma rápida que valores
presentan y que tipo de variables son.
2
Estudio y depuración de datos Tema 1
En este caso muestra el análisis de la variable Gender que es nominal, tipo cadena,
amplitud 6 y los valores que aparecen en dicha variable deberían ser F y M pero
además aparecen X, 2 y f. Como vemos este primer análisis es muy útil porque
detecta valores “extraños” que podremos corregir transformando la variable. Además
podemos incluir etiquetas tanto de variable como de valores.
La opción copiar las propiedades de otras variables es muy útil cuando tenemos en un
mismo fichero variables del mismo tipo, por ejemplo escalas de Likert, cuyos valores
van del 1 al 5 y sus etiquetas son siempre las mismas. Esta opción implica que
aplicará a nuestra variable el mismo nivel, el mismo formato (anchura y decimales) y
las mismas etiquetas a los valores.
3
Estudio y depuración de datos Tema 1
En ocasiones, los datos de un archivo están preparados para que sea posible aplicar
directamente sobre ellos el análisis estadístico deseado. Pero esto sólo ocurrirá en
una situación ideal; y las situaciones ideales raramente se presentan. Más bien al
contrario, lo habitual será encontrarse con archivos de datos que necesitarán ser
cuidadosamente preparados antes de poder aplicar con las mínimas garantías
cualquier análisis estadístico.
La preparación del archivo de datos incluye desde la simple detección y corrección de
los posibles errores cometidos al introducir datos, hasta sofisticadas transformaciones
(necesarias a veces para llegar a obtener las variables que realmente interesan),
4
Estudio y depuración de datos Tema 1
pasando por la recodificación de los códigos utilizados para los valores de una o más
variables, o la creación de nuevas variables a partir de otras ya existentes.
Por ejemplo, cuando una base de datos contiene la fecha de nacimiento, es mucho
más útil generar la variable edad, más fácil de interpretar, analizar como variable en si
misma y manejar numéricamente.
5
Estudio y depuración de datos Tema 1
6
Estudio y depuración de datos Tema 1
Funciones
La lista del recuadro Funciones incluye más de 70 funciones aritméticas, estadísticas,
lógicas, etc. La ayuda específica del cuadro de diálogo Calcular variable contiene
información puntual sobre estas funciones. Además, situando el puntero del ratón
sobre una función, al pulsar el botón secundario del ratón aparece un cuadro de ayuda
contextual con una descripción de esa función. Para trasladar una función al cuadro de
texto Expresión numérica:
Seleccionar la función y pulsar el botón flecha para trasladarla al cuadro
Expresión numérica.
Una expresión no está completa hasta que se incluye entre paréntesis el argumento
de la función seleccionada. Algunos ejemplos:
1. MEAN (var1, var2, var3).
2. ARSIN (ABS(SQRT(Var1))).
3. RV.NORMAL (0, 1).
La primera expresión calcula la media aritmética de var1, var2 y var3. La segunda
calcula la función arcoseno del valor absoluto de la raíz cuadrada de la variable var1
(transformación ésta muy utilizada, por ejemplo, cuando las puntuaciones de la
variable dependiente de un análisis de varianza son proporciones). La tercera
7
Estudio y depuración de datos Tema 1
8
Estudio y depuración de datos Tema 1
Expresiones condicionales
Definida la expresión numérica, el botón Aceptar crea una nueva variable en la que
todos los casos válidos del archivo de datos adoptan el valor resultante de la expresión
numérica propuesta. Ahora bien, la expresión numérica no tiene por qué afectar a
todos los casos del archivo. De hecho, podemos establecer una condición
cualquiera y hacer que las transformaciones propuestas afecten sólo a los casos
que cumplan esa condición. Para ello:
Pulsar el botón Si... del cuadro de dialogo Calcular variable para acceder al
subcuadro de diálogo Calcular variable: Si los casos
9
Estudio y depuración de datos Tema 1
Este subcuadro de diálogo permite establecer una gran variedad de condiciones para
seleccionar sólo los casos que interesen:
Incluir todos los casos. Con esta opción activa, las transformaciones propuestas
afectan a todos los casos. Es la opción por defecto.
Incluir si el caso satisface la condición. Esta opción hace que las transformaciones
propuestas afecten únicamente a los casos que cumplan la condición establecida. La
condición puede incluir nombres de variables, constantes, operadores aritméticos,
relacionales y lógicos, y funciones matemáticas. Para construir la condición
disponemos de un teclado de calculadora y de una lista de funciones idénticos a los
del cuadro de diálogo Calcular variables.
10
Estudio y depuración de datos Tema 1
construirse utilizando el teclado directamente, en cuyo caso hay que tener en cuenta
unas pocas reglas para no cometer errores:
• Los valores de las variables de cadena deben escribirse entre apóstrofos o entre
comillas. Hay que tener especial cuidado en no dejar espacios en blanco donde no
deba haberlos.
• Los argumentos de una función deben ir entre paréntesis y, cuando haya más de
uno, separados por comas. Puede insertarse un espacio en blanco entre un paréntesis
y un argumento, o entre un argumento y otro, pero no es necesario.
• Dentro de una expresión compleja, todas las expresiones simples deben estar
completas.
Por ejemplo, edad > 18 & < 30 es una expresión incorrecta, por incompleta. La
expresión correcta es: edad > 18 & edad < 30.
• El punto es el único separador decimal válido, independientemente de las
especificaciones internacionales seleccionadas en Windows.
11
Estudio y depuración de datos Tema 1
El recuadro Valor contiene varias opciones para especificar el valor o valores que se
desea contar. Permite seleccionar valores individuales, rangos de valores o una
combinación de ambas cosas:
Valor. Para contar el número de veces que aparece un valor concreto.
12
Estudio y depuración de datos Tema 1
Perdido por el sistema. Para contar el número de valores perdidos definidos por el
sistema. En la lista de valores aparece SYSMIS.
Perdido por el sistema o usuario. Para contar el número de valores perdidos de
cualquier tipo (definidos por el sistema o definidos por el usuario). En la lista de valores
aparece MISSING.
Rango (...hasta...). Para contar el número de veces que aparecen valores
comprendidos entre los límites del rango definido. No disponible para variables de
cadena.
Rango (Del menor hasta...). Para contar el número de veces que aparecen valores
comprendidos entre el valor más pequeño y el valor especificado. No disponible para
variables de cadena.
Rango (...hasta el mayor). Para contar el número de veces que aparecen valores
comprendidos entre el valor especificado y el mayor. No disponible para variables de
cadena.
La función Contar efectúa, para cada caso del archivo, un recuento del número de
veces que se repite, en el conjunto de variables seleccionadas, cualquier valor de los
añadidos a la lista.
El resultado es
13
Estudio y depuración de datos Tema 1
La función Contar, al igual que la función calcular, puede afectar a todos los casos del
archivo o a sólo un conjunto de casos que cumplan determinada condición. Si se
desea establecer alguna condición:
El botón Si... conduce el subcuadro de diálogo Contar apariciones:
Si los casos el cual permite establecer las condiciones que deben cumplir los casos
seleccionados.
Ejemplo:
Transformar el género en sus iniciales en español M-V en lugar de F-M y . para los
valores Missing
14
Estudio y depuración de datos Tema 1
Valores antiguos y nuevos... Una vez seleccionadas las variables que se van a
recodificar, es necesario indicar la recodificación concreta que se desea llevar a cabo.
Para ello, el botón Valores antiguos y nuevos... conduce al subcuadro de diálogo
Recodificar en las mismas variables:
Valor antiguo. Las opciones de este recuadro permiten especificar el valor o valores
de la variable original que se desea recodificar. Ofrece varias alternativas para facilitar
la identificación del valor o valores antiguos:
15
Estudio y depuración de datos Tema 1
Valor nuevo. En este recuadro debe especificarse el nuevo valor que se desea
asignar al valor o valores antiguos. Ofrece las siguientes alternativas:
Valor. El valor introducido en este cuadro de texto sustituye al valor o valores
antiguos recién definidos. (Si se trata de una variable de cadena, el valor introducido
en este cuadro de texto aparece entre apóstrofos o comillas al trasladarlo a la lista de
valores: por tanto, no hay que poner apóstrofos o comillas a los valores de las
variables de cadena, como ocurre, por ejemplo, en los cuadros de diálogo que
permiten definir una expresión numérica).
Perdido por el sistema. Asigna un valor perdido definido por el sistema (aparece
como SYSMIS en la lista de valores).
16
Estudio y depuración de datos Tema 1
Debe tenerse presente que, es posible asignar el mismo valor nuevo a más de un
valor antiguo (lo cual puede resultar útil, por ejemplo, para fundir en un sólo valor
nuevo valores antiguos no consecutivos).
Este cuadro de diálogo permite crear variables nuevas a partir de los valores de
variables ya existentes. La diferencia está, únicamente, en que aquí es necesario
asignar nombre (y, opcionalmente, etiqueta) a las nuevas variables que deseamos
crear. Para iniciar la recodificación en variables diferentes:
17
Estudio y depuración de datos Tema 1
Pulsar el botón Cambiar para activar el nuevo nombre y situarlo en la lista Var.
de entrada Var. de resultado junto al nombre de la variable original.
18
Estudio y depuración de datos Tema 1
19
Estudio y depuración de datos Tema 1
20
Estudio y depuración de datos Tema 1
En nuestro ejemplo el análisis descriptivo nos muestra un posible outlier entre 1300 y
1458,75. De momento no lo eliminamos (los outliers los estudiaremos en el tema
siguiente) e iniciamos la categorización.
El SPSS crea una variable con los nuevos códigos y el nuevo nombre asignado. La
variable original queda intacta. Si la variable original posee etiquetas, a la nueva
variable y a los nuevos códigos se les asignan las mismas etiquetas. Si los valores de
la variable original no poseen etiquetas, los nuevos códigos adoptan como etiquetas
los valores de la variable original.
Continuamos seleccionando en crear puntos de corte
21
Estudio y depuración de datos Tema 1
22
Estudio y depuración de datos Tema 1
23
Estudio y depuración de datos Tema 1
Si realizamos un análisis descriptivo para ver como quedan las dos nuevas variables
creadas observamos que en la primera opción amplitudes iguales las categorías tiene
frecuencias muy desiguales incluso hay algunas categorías con frecuencia cero.
INDICE (Binned)
Frequency Percent Valid Percent Cumulative Percent
1 1 3,2 4,0 4,0
2 18 58,1 72,0 76,0
Valid 3 5 16,1 20,0 96,0
7 1 3,2 4,0 100,0
Total 25 80,6 100,0
Missing System 6 19,4
Total 31 100,0
24
Estudio y depuración de datos Tema 1
Mientras que la variable categorizada utilizando los percentiles tiene categorías con
aproximadamente la misma frecuencia. Observemos que en la tabla de frecuencias
aparecen las etiquetas indicando los intervalos en que hemos dividido a la variable.
INDICE (Binned)
Frequency Percent Valid Percent Cumulative Percent
<=162 4 12,9 16,0 16,0
162-176 4 12,9 16,0 32,0
176-188 3 9,7 12,0 44,0
188-216 4 12,9 16,0 60,0
Valid
216-230 3 9,7 12,0 72,0
230-301 4 12,9 16,0 88,0
302,00+ 3 9,7 12,0 100,0
Total 25 80,6 100,0
Missing System 6 19,4
Total 31 100,0
25
Estudio y depuración de datos Tema 1
26
Estudio y depuración de datos Tema 1
Tipos de rango
Pulsar el botón Tipos de rango... (ver figura 5.13) para acceder al subcuadro
de diálogo
27
Estudio y depuración de datos Tema 1
j
1
Rj 1
i 1 n i 1
c
Variables creadas
Variable de Función Nueva Etiqueta
origen variable
a
HR Estimación de proporción PHR Proportion Estimate of HR using
Blom's Formula
Puntuación normal NHR Normal Score of HR using Blom's
Formula
Rango RHR Rank of HR
Puntuación de Savage SHR Savage Score of HR
b
Grupo de percentiles NTI001 Percentile Group of HR
Rango fraccional RFR001 Fractional Rank of HR
Porcentaje de rango PER001 Fractional Rank Percent of HR
fraccional
Suma de ponderaciones de N001 Sum of Case Weights of HR
los casos
a. Los rangos se encuentran en orden ascendente.
b. Se generarán 4 grupos.
c. El rango promedio de los valores empatados se utilizará para los empates.
28
Estudio y depuración de datos Tema 1
29
Estudio y depuración de datos Tema 1
Además de varias opciones para asignar rangos a los casos, el cuadro de diálogo
Asignar rangos contiene también opciones para:
1) obtener estimaciones de la proporción de casos acumulada hasta cada rango y
2) calcular las puntuaciones típicas normales que corresponden a esas proporciones.
Para obtener esta información adicional:
Ri 3 R 1 Ri 1
8 . Tukey. i 3 2 Ri
Blom. Rankit. Van der Waerden.
n 1 4 n 1 3 n n 1
Rangos empatados
Cuando existen casos con los mismos valores, es decir, casos empatados, a cada
caso se le asigna, por defecto, el promedio de los rangos que corresponden a esos
casos. Para utilizar un tratamiento distinto de los empates:
30
Estudio y depuración de datos Tema 1
Pulsar el botón Empates... para acceder al subcuadro de diálogo Asignar rangos a los
casos: Empates
Rango asignado a los empates. El SPSS ofrece cuatro formas distintas de asignar
rangos a los empates.
Media. Asigna la media de los rangos que corresponden a los casos empatados. Es la
opción por defecto.
Menor. Asigna el menor de los rangos que corresponden a los casos empatados.
Mayor. Asigna el mayor de los rangos que corresponden a los casos empatados.
Rangos secuenciales para valores únicos. Asigna rangos de 1 a m, siendo m el
número de valores distintos. Los casos empatados reciben el mismo rango y cuentan
cómo un único caso al computar el rango siguiente.
31
Estudio y depuración de datos Tema 1
El SPSS crea una variable con los nuevos códigos y el nuevo nombre asignado. La
variable original queda intacta. Si la variable original posee etiquetas, a la nueva
variable y a los nuevos códigos se les asignan las mismas etiquetas. Si los valores de
32
Estudio y depuración de datos Tema 1
la variable original no poseen etiquetas, los nuevos códigos adoptan como etiquetas
los valores de la variable original.
Recodificar empezando por. Las opciones de este recuadro permiten cambiar el
orden en el que son asignados los nuevos códigos:
Menor valor. Asigna los códigos en orden ascendente: al valor más pequeño se le
asigna un 1, al valor más pequeño de los restantes se le asigna un 2, etc. Es la opción
por defecto.
Mayor valor. Asigna los códigos en orden descendente: al valor más grande se le
asigna un 1, al valor más grande de los restantes se le asigna un 2, etc. Si la variable
es de cadena, los nuevos códigos se asignan de acuerdo con el orden alfabético de
las categorías (las mayúsculas preceden a las minúsculas). Los valores perdidos son
codificados después de los válidos.
33
Estudio y depuración de datos Tema 1
En este ejemplo los datos de la variable vienen dados por meses desde Enero de
1968. De esta forma asociadas a la variable que contiene los valores de la serie X
aparece la variable fecha.
34
Estudio y depuración de datos Tema 1
El prefijo dolar indica que el formato de lectura de datos da lugar a datos de tipo
carácter.
La sentencia value crea un formato que especifica cadenas para usar a la hora de
imprimir las variables. Esta sentencia va asociada a su posterior utilización en una
sentencia Format Consideremos los siguientes ejemplos:
35
Estudio y depuración de datos Tema 1
Proc format;
picture ingresos 0-70000='00000' 70001-150000='000000'
other='más de 150000' (noedit);
run;
data uno; input ingre;
cards;
50000
300000
130000
;run;
proc print data=uno;
format ingre ingresos.;
run;
La salida es
Obs ingre
1 50000
2 más de 150000
3 130000
Observemos que los ceros nos indican el espacio reservado al valor y la opción noedit
al final de la sentencia indica que el formato presentado no representa valores sino un
mensaje (categorías). Además podemos utilizar low y high que representan el mínimo
y máximo.
Sobre el ejemplo pacientes vamos a identificar los valores erróneos de una variable y
recodificarlos de forma adecuada.
data EYDD.patients;
infile 'E:\EYDD\Ejemplos\Patients.txt'
36
Estudio y depuración de datos Tema 1
@4 gender $1.
@5 Visit mmddyy10.
@15 HR 3.
@18 SBP 3.
@21 DBP 3.
@24 Dx $3.
@27 AE $1.;
12 011 M . 68 300 20 4 1
18 015 F . 82 148 88 3 1
21 123 M . 60 . . 1 0
23 020 F . 10 20 8 0
37
Estudio y depuración de datos Tema 1
25 023 f 12/31/1998 22 34 78 0
30 029 M 05/15/1998 . . . 4 1
Para obtener de forma rápida y resumida los valores que toman las variables que
nos interesen haremos un proc freq.
f 2 5 3
6 1
7 2
X 2
Si queremos tener una lista de únicamente los valores mal codificados utilizaremos
dos programas distintos para obtenerla. Uno con funciones condicionales y el otro
con el proc format para crear los formatos de lectura y asignar el valor ‟Miscoded‟ a los
valores mal codificados. En ambos casos creamos un fichero de datos auxiliar (data
_null_) para imprimirlo en la ventana de salida (file print) seleccionando los valores mal
codificados con la función put.
Observemos que Gender y AE son chequeadas utilizando el operador IN que indica
que si la variable toma uno cualquiera de los valores de la lista se cumple la condición.
En nuestro caso lo utilizamos negando (not) en este caso si no es ninguno será no
valido y escribimos (put ) en el Output su número de observación y el valor. .
38
Estudio y depuración de datos Tema 1
data _null_;
set EYDD.patients;
file print;
if Gender not in ('F' 'M' ' ') then put Patno= Gender=;
Patno=002 Dx=X
Patno=003 gender=X
Patno=004 AE=A
Patno=010 gender=f
Patno=013 gender=2
Patno=002 Dx=X
Patno=023 gender=f
La salida es:
Patno=003 gender=X
Patno=004 AE=A
Patno=010 gender=f
Patno=013 gender=2
Patno=023 gender=f
39
Estudio y depuración de datos Tema 1
En este programa hemos utilizado la función PUT que junto con la INPUT son muy
útiles para crear variables recodificadas con un formato determinado. La sintaxis de
estas funciones es:
Es decir creamos una variable carácter que contiene los valores de la variable con el
formato que hemos creado antes mediante una sentencia value. Este formato
debe ser del mismo tipo que la variable que queremos crear. Por esto esta función se
utiliza para recodificar variables carácter o numéricas en carácter.
En este caso creamos una variable que puede ser numérica o carácter dependiendo
del formato que le asignemos. Esta contiene los valores de la variable con el formato
que hemos creado antes mediante una sentencia invalue. Por esto esta función
se utiliza para recodificar variables de cualquier tipo.
Ahora veamos cómo utilizar los formatos para chequear los valores de una variable o
recodificarlos. La sentencia invalue del procedimiento FORMAT crea un formato de
entrada para leer o convertir los datos de un fichero si directamente usamos este
formato creado de lectura. En nuestro ejemplo recodificamos las variables de tipo
carácter Gender y AE sustituyendo los valores mal codificados como missing (.).
proc format;
40
Estudio y depuración de datos Tema 1
1 001 M 0
2 002 F 0
3 003 . 1
4 004 F .
5 XX5 M 0
6 006 . 1
7 007 M 0
8 M 0
9 008 F 0
10 009 M 1
11 010 . 0
proc format;
invalue $gen (UPCASE) 'F'= 'F' 'M' ='M'
other = '.';
invalue $ae '0','1' = _same_
other = '.';
run;
En este caso la salida será
1 001 M 0
2 002 F 0
3 003 . 1
4 004 F .
5 XX5 M 0
6 006 . 1
7 007 M 0
8 M 0
9 008 F 0
10 009 M 1
41
Estudio y depuración de datos Tema 1
11 010 F 0
12 011 M 1
proc format;
invalue $gender (upcase) 'F'='F' 'M' ='M' Other = '.';
Para una variable numérica lo primero que tenemos que controlar es el rango de
valores que aparecen en el fichero para ver si son valores posibles de la variable.
Además de los valores missing. Esto lo podemos ver de una forma sencilla mediante
el procedimiento means.
42
Estudio y depuración de datos Tema 1
Observemos que la variable SBP tiene un missing más que las otras, por esto N tiene
uno menos (N son los valores no misssing).
Para detectar las observaciones que se salen fuera del rango de valores posibles de
una variable podemos utilizar el proc format. En nuestro ejemplo HR toman valores
entre 40 y 100, SBP entre 80 y 200 y DBP entre 60 y 120.
PROC FORMAT;
VALUE HR_F 40-100='OK';
VALUE SBP_F 80-200='OK';
VALUE DBP_F 60-120='OK';
RUN;
title "Imprimimos un lista con los datos fuera de rango";
data _null_;
set EYDD.patients(keep=Patno HR SBP DBP);
file print; /*envia los datos mal codificados a la ventana output*/
if put(HR,HR_F.) NE 'OK' OR _ERROR_ GT 0 THEN PUT Patno= HR=;
if put(SBP,SBP_F.) NE 'OK' OR _ERROR_ GT 0 THEN PUT Patno= SBP=;
if put(DBP,DBP_F.) NE 'OK' OR _ERROR_ GT 0 THEN PUT Patno= DBP=;
run;
El resultado es la siguiente tabla en la ventana output.
Patno=004 HR=101
Patno=008 HR=210
Patno=008 SBP=.
Patno=008 DBP=.
Patno=009 SBP=240
Patno=009 DBP=180
Patno=010 HR=.
Patno=010 SBP=40
Patno=011 SBP=300
Patno=011 DBP=20
Patno=014 HR=22
Patno=017 HR=208
Patno=017 SBP=.
Patno=123 SBP=.
Patno=123 DBP=.
Patno=321 HR=900
Patno=321 SBP=400
Patno=321 DBP=200
Patno=020 HR=10
Patno=020 SBP=20
Patno=020 DBP=8
Patno=023 HR=22
Patno=023 SBP=34
Patno=027 HR=.
Patno=029 HR=.
Patno=029 SBP=.
Patno=029 DBP=.
Si queremos que los datos mal codificados sean tratados como missing (.) podemos
recodificarlos como tal utilizando el proc Format para crear el formato de lectura
adecuado para los valores y guardarlos en un nuevo fichero.
43
Estudio y depuración de datos Tema 1
proc format;
PICTURE HR_F 40-100='000' other = .;
PICTURE SBP_F 80-200='000' Other = .;
PICTURE DBP_F 60-120='000' other = .;
run;
data EYDD.PACIENTES3;
set EYDD.patients;
KEEP PATNO HR SBP DBP;
FORMAT HR HR_F. SBP SBP_F. DBP DBP_F. ;
run;
proc print data=EYDD.PACIENTES3; run;
El nuevo fichero contiene solo las cuatro variables que hemos guardado y los valores
fuera de rango se han sustituido por puntos. Ponemos al lado la tabla que obtuvimos
antes de lo valores fuera de rango para comprobar que han sido sustituidos
19 017 . . 84
20 019 58 118 70
21 123 60 . .
22 321 . . .
23 020 . . .
24 022 48 114 82
25 023 . . 78
26 024 76 120 80
27 025 74 102 68
44
Estudio y depuración de datos Tema 1
29 028 66 150 90
30 029 . . .
31 006 82 148 84
proc format;
INVALUE HR_F 40-100=_SAME_ other = .;
INVALUE SBP_F 80-200=_SAME_ Other = .;
INVALUE DBP_F 60-120=_SAME_ other= .;
run;
data EYDD.PACIENTES3;
set EYDD.patients;
KEEP PATNO HR SBP DBP HR_R SBP_R DBP_R;
HR_R=INPUT(HR, HR_F.);
SBP_R=INPUT(SBP, SBP_F.);
DBP_R=INPUT(DBP, DBP_F.);
run;
proc print data=EYDD.PACIENTES3 (OBS= 15) ; run;
9 008 210 . . . . .
12 011 68 300 20 68 . .
45
Estudio y depuración de datos Tema 1
22 58 66 68 74 82 84 88 208
1 88 5
2 84 4
3 68 3
4 101 5
5 68 3
6 72 3
7 88 5
8 90 5
46
Estudio y depuración de datos Tema 1
Razón cardiaca
68 3 10.71 12 42.86
72 1 3.57 13 46.43
74 2 7.14 15 53.57
76 1 3.57 16 57.14
82 2 7.14 18 64.29
84 2 7.14 20 71.43
86 1 3.57 21 75.00
88 2 7.14 23 82.14
90 1 3.57 24 85.71
Como vemos es conveniente poner etiquetas a los valores de la nueva variable creada
para poder interpretarla correctamente.
Utilizando SELECT.
Esta función equivale a la anterior pero es más cómoda de utilizar especialmente
cuando el número de condiciones a evaluar es alto. Veamos como crearíamos la
variable categorizada con esta función.
47
Estudio y depuración de datos Tema 1
SELECT;
WHEN (0 LE HR LT 58) CAT=1;
WHEN (58 LE HR LT 68) CAT=2;
WHEN (68 LE HR LT 82) CAT=3;
WHEN (82 LE HR LT 88) CAT=4;
OTHERWISE CAT=5;
END;
RUN;
PROC FORMAT;
VALUE HRF 0-58='<58'
58-68 ='58-68'
68-82 ='68-82'
82-88 ='82-88'
90-HIGH='>90';
RUN;
PROC PRINT DATA=EYDD.PATIENTS (KEEP=Patno HR);
FORMAT HR HRF.;
run;
PROC FREQ DATA= EYDD.PATIENTS (KEEP= HR);
FORMAT HR HRF.;RUN;
Obs Patno HR
Razón cardiaca
1 001 82-88
HR Frequency Percent Cumulative Cumulative
2 002 82-88
Frequency Percent
3 003 58-68
<58 6 21.43 6 21.43
4 004 >90
58-68 6 21.43 12 42.86
5 XX5 58-68
68-82 6 21.43 18 64.29
6 006 68-82
82-88 5 17.86 23 82.14
7 007 82-88
>90 5 17.86 28 100.00
8 >90
Si además queremos crear una variable que sea la variable categorizada podemos
hacerlo con la función PUT, que ya utilizamos antes.
48
Estudio y depuración de datos Tema 1
DATA CATEP3;
SET EYDD.PATIENTS;
CATEGORIA=PUT(HR,HRF.);
RUN;
PROC PRINT DATA=CATEP3 (KEEP=HR CATEGORIA);
RUN;
Obs HR CATEGORIA
1 88 82-88
2 84 82-88
3 68 58-68
4 101 >90
5 68 58-68
6 72 68-82
7 88 82-88
8 90 >90
49
Estudio y depuración de datos Tema 1
data sampdate;
sampdate = '28jul2004'd;
samptime = '11:32't;
sampdtime= '28jul2004:11:32'dt;
put sampdate=;
put samptime=;
put sampdtime=;
run;
El resultado en el Log es
sampdate=16280
samptime=41520
sampdtime=1406633520
50
Estudio y depuración de datos Tema 1
Si queremos ver estos valores en su formato habitual tendremos que utilizar los
formatos de sas.
proc print;
format sampdate date.;
format samptime time.;
format sampdtime datetime.;
run;
El resultado es:
Obs sampdate samptime sampdtime
1 28JUL04 11:32:00 28JUL04:11:32:00
proc print;
format sampdate current date.;
format samptime time.;
format sampdtime datetime.;
run;
La función today nos da la fecha actual según los datos almacenados en el reloj del
ordenador.
51
Estudio y depuración de datos Tema 1
data extensions;
sampdate = '28jul2004'd;
put ' ' sampdate= mmddyy10.;
put 'b ' sampdate= mmddyyb10.;
put 'c ' sampdate= mmddyyc10.;
put 'd ' sampdate= mmddyyd10.;
put 'n ' sampdate= mmddyyn8.;
put 'p ' sampdate= mmddyyp10.;
put 's ' sampdate= mmddyys10.;
run;
En el Log tendríamos:
Sampdate = 07/28/2004
b sampdate = 07 28 2004
c sampdate = 07:28:2004
d sampdate = 07-28-2004
n sampdate = 07282004
p sampdate = 07.28.2004
s sampdate = 07/28/2004
Si queremos crear una variable que sea la fecha asociada a una serie temporal
utilizaremos la función Intnx. Esta función incluida en el paso Data genera una
variable con la fecha empezando en la fecha que marquemos y avanzando una unidad
con cada observación. Por ejemplo,
data fechas1;
input serie ;
date = intnx( 'month', '01sep78'd, _n_-1 );
format date monyy.;
cards;
47.395
45.73
44.647
45.087
46.1
45.045
44.752
;
proc print; run;
52
Estudio y depuración de datos Tema 1
Cuya salida es
Obs serie date
1 47.395 SEP78
2 45.730 OCT78
3 44.647 NOV78
4 45.087 DEC78
5 46.100 JAN79
6 45.045 FEB79
7 44.752 MAR79
data period;
sampdate = '28jul2004'd;
start = intnx('month',sampdate,0);
stop = intnx('month',sampdate,1) - 1;
put sampdate= worddate18.;
put start= date9.;
put stop= mmddyy10.;
run;
data _null_;
file print;
sdate='16oct1998'd;
edate='16feb2003'd;
years=yrdif(sdate, edate, 'ACT/ACT');
put years=;
run;
53
Estudio y depuración de datos Tema 1
years=4.3369863014
Chequeo de fechas.
Supongamos que en nuestro ejemplo las fechas de las visitas deben estar entre el 1
de Junio de 1998 y el 15 de Octubre 1999.
Obtenemos
Patno=XX5 Visit=05/07/1998
Patno=010 Visit=10/19/1999
Patno=003 Visit=11/12/1999
Patno=028 Visit=03/28/1998
Patno=029 Visit=05/15/1998
Patno Visit
XX5 07MAY1998
010 19OCT1999
003 12NOV1999
028 28MAR1998
029 15MAY1998
54