• No se han encontrado resultados

DE PROGRAMACIÓN DEFINIR NUEVAS VARIABLES

Definiendo nuevas variables

Considerando que ya está familiarizado con la mecánica de las ventanas de R+SP, menús, Asistentes y otras facilidades, ahora nos concentraremos principalmente en el uso del lenguaje de R+SP. Para propósitos de enseñanza, es preferible que escriba los comandos directamente en el Editor de Comandos. Por esta razón, no serán utilizados en esta guía los Asistentes Guiados, que son particularmente convenientes para usuarios que no trabajan frecuentemente con R+SP y requieren ayuda para recordar el lenguaje. Note que el Asistente de DEFINE, que no ha sido usado explícitamente, opera de manera similar a los otros Asistentes.

Como se indicó anteriormente, una vez conocido el lenguaje de comandos de R+SP, usualmente es más rápido —e interrumpe menos el proceso de pensamiento— escribir un comando directamente en el Editor de Comandos. Además, los nombres de

entidad.variable se deben arrastrar desde el diccionario lo que evita errores de

escritura (que generan errores de compilación). La necesidad de definir: DEFINE

Habitualmente, su base de datos no contiene las variables que usted requiere para sus resultados en tabla, pero probablemente tendrá la información que necesita para crear o derivar nuevas variables. Es posible que usted requiera trabajar sólo con un grupo de personas agrupados en edades quinquenales, o quizás crear un indicador complejo que integre gran cantidad de variables del diccionario para determinar, por ejemplo, el nivel de pobreza en cada manzana. Para estos propósitos, R+SP provee el comando

DEFINE, que crea nuevas variables desde otras ya existentes, a menudo usando una

serie de DEFINEs que construyen otras variables en forma previa.

Aunque tenga que trabajar directamente dentro del Editor de Comandos, use el Asistente cuando sea necesario. Note que el Asistente de DEFINE está disponible, como en el caso de los otros Asistentes, el que es especialmente útil para quienes utilizan de manera poco frecuente el R+SP y no recuerdan detalles de los comandos. En esta parte de la Guía, usted desea obtener dos resultados para el país completo de Nueva Miranda:

Salida 1) El promedio de edad de los jóvenes (considerando las edades 5 a 29 años) por estado de asistencia a la escuela en (asistiendo versus no asistiendo actualmente) según el más alto nivel de estudios alcanzado y por sexo.

Salida 2) El número de hombres y mujeres, con edades 15 a 29 años, por grupos quinquenales, que asisten o asistieron a escuela técnica/comercial o instituto profesional. El primer comando mandatorio, RUNDEF, requiere una Selección para el país completo. Como usted sabe, R+SP provee la palabra reservada ALL para este propósito.

Considerando que ambos resultados están dentro del rango de edad 5-29 años, se puede utilizar una cláusula UNIVERSE con el RUNDEF. De esta forma, el primer comando debiera ser:

RUNDEF programa4 SELECTION ALL

UNIVERSE PERSON.EDAD >=5 AND PERSON.EDAD <=29

Sin embargo, más que usar UNIVERSE en el comando RUNDEF, optaremos un FOR para filtrar los registros cuando el estado de asistencia esté definido (DEFINE).

Agrupando categorías con DEFINE...AS RECODE Salida 1) requiere un

AVERAGE

OF PERSON.EDAD BY PERSON.TIPOE BY PERSON.ASISSTAT BY PERSON.SEXO

en que person.asisstat es "Estado de asistencia a la escuela". Esta utiliza información de la variable del diccionario person.asiste, pero algunas de sus categorías son agrupadas en una nueva categoría. Si hace un clic en el ícono del Diccionario y luego uno en la variable person.asiste para revisar sus categorías, notará que "Asistió" y "Nunca asistió" pueden ser combinadas para crear la categoría "No asistiendo". Eso significa que es posible definir una nueva variable (DEFINE) person.asisstat mediante un RECODE de las categorías originales de person.asiste, utilizando la siguiente relación:

Variable Original PERSON.ASISTE

Nueva variable PERSON.ASISSTAT 0 Sin respuesta 0 Sin respuesta 1 Asiste 1 Asistiendo 2 Asistió

3 Nunca asistió

2 No asistiendo

La cláusula RECODE del comando puede ser escrito en R+SP:

DEFINE PERSON.ASISSTAT

AS RECODE PERSON.ASISTE (0 =0) (1 =1) (2- 3 =2) TYPE INTEGER

Note que si elimina las recodificaciones para (0=0)(1=1) obtendrá exactamente el mismo resultado, dado que R+SP recodifica los valores de las categorías no mencionadas a sus mismos valores, a menos que se utilice la cláusula ELSE (vea el próximo párrafo para un ejemplo). Note también que en este ejemplo las siguientes formas son equivalentes:

(2-3=2), (2 - HIGHEST=2) y (2,3=2)

Obviamente, cuando sea relevante, también puede utilizarse LOWEST.

El segundo resultado requerido para este ejercicio, Salida 2) definida anteriormente, también requiere una variable. La variable edad simple person.edad, que es una variable del censo de Nueva Miranda, deberá estar agrupada en intervalos de edad de 5 años. El resultado deberá estar restringido a personas mayores de 15 años (el

UNIVERSE ya excluyó a las personas mayores de 29 años). El agrupamiento de 5 años

puede ser realizado con un DEFINE de varias maneras pero quizás la forma más directa —y más aburrida— es mediante la creación de la nueva variable person.edad5Rec con la cláusula RECODE: DEFINE PERSON.EDAD5REC AS RECODE PERSON.EDAD (15- 19 =4) (20- 24 =5) (25- 29 =6) ELSE 0 TYPE INTEGER RANGE 0 – 2

Dado que los grupos de edades quinquenales son requeridos frecuentemente para todas las edades de 0 y más años, —es decir, 0 a 4 en el primer grupo, 5 a 9 en el segundo, etc.—, aquí se utilizarán los códigos comunes. Note que usted sólo necesita los grupos 4, 5 y 6, por lo que puede utilizar la cláusula ELSE para indicar la categoría (aquí 0) en la cual serán colocadas todas las demás. Es decir, la edad de las personas que está en el rango 15 a 29 años será manejada mediante el RECODE, o el ELSE las recodificará en cero.

Filtrando un DEFINE con un FOR

En el primer resultado pedido, usted está interesado sólo en las personas de 5 a 29 años. La variable person.asisstat que recodificó anteriormente, podría ser filtrada para incluir sólo a dichas personas agregando al comando DEFINE una cláusula FOR, quedando de la siguiente manera:

DEFINE PERSON.ASISSTAT

AS RECODE PERSON.ASISTE (0 =0) (1 =1) (2- 3 =2) FOR PERSON.EDAD >= 5 AND 90PERSON.EDAD <=29 TYPE INTEGER

Esta lleva a cabo el RECODE considerando sólo estos registros, aquí personas, para quienes el FOR es Verdadero; cuando la expresión es Falsa, la variable asisstat es considerada como No aplica, que corresponde a un código interno de R+SP.

Especificando el rango (RANGE) y tipo (TYPE) de una nueva variable

Rango (RANGE): Corresponde a los valores mínimo y máximo de la nueva variable. El rango de una nueva variable debe ser incluido siempre con el comando DEFINE ya que debe ser utilizado si la variable es empleada en un cruce, frecuencia o promedio. Este permite que R+SP trabaje más rápidamente y que utilice menos espacio en memoria para las tablas, toda vez que conoce de antemano el tamaño de la tabla de salida.

Tipo (TYPE): Cuando sea posible, la mayoría de las variables deberá tener un tipo de dato entero ( TYPE INTEGER), puesto que R+SP procesa más rápido con números

sin decimales. Posteriormente indicaremos cómo trabajar números reales, con TYPE

REAL.

Rotulando con VARLABEL y VALUELABELS

Las variables recientemente definidas (DEFINE) no poseen un rótulo descriptivo a menos que sea especificado explícitamente; obviamente, cada una de las nuevas variables debe tener su nombre entidad.variable. Las categorías para las nuevas variables nacen de códigos numéricos sin nombre. Darles un rótulo es una acción opcional, pero normalmente de un gran uso, puesto que favorece grandemente la comprensión del programa y sus resultados. El uso de las cláusulas VARLABEL y

VALUELABELS es como sigue:

Ejemplo para rotular la variable person.asistat. Luego del RECODE en el DEFINE se escribe:

DEFINE PERSON.ASISSTAT

AS RECODE PERSON.ASISTE (0 =0) (1 =1) (2- 3 =2) FOR PERSON.EDAD >= 5 AND 90PERSON.EDAD <=29 TYPE INTEGER

RANGE 0 – 2

VARLABEL "Estado de asistencia a la escuela"

VALUELABELS 0 " sin respuesta" 1 " asistiendo" 2 " no asistiendo"

Note que el nombre debe estar encerrado en comillas. VALUELABELS no necesariamente describe cada una de ellas o todas, ya que sólo puede hacerlo para algunas.

Es importante notar que las variables creadas con un DEFINE existen sólo mientras dure la ejecución. Habitualmente, las variables no son almacenadas en el

Diccionario, la base de datos o cualquier otro lugar, a menos que se use explícitamente la cláusula SAVE para guardar la variable —véase DEFINE...SAVE. Por esta razón, se recomienda insistentemente guardar sus Programas, particularmente cuando ellos tienen extensos o complejos cálculos de indicadores definidos con DEFINE, que difícilmente podría reescribir. Esto no solamente protege contra pérdidas sino que permite cortar y pegar programas de acuerdo a sus requerimientos para la creación de variables.

Usando las variables nuevas en los TABLES

En este ejercicio se buscaba el promedio de edad de personas entre 5 y 29 años según asistencia y tipo de educación que se expresa de la siguiente forma en un programa:

TABLE t1

AS AVERAGE OF

PERSON.EDAD BY PERSON.TIPOE BY PERSON.ASISTAT BY PERSON.SEXO

EJERCICIO 5 DE PROGRAMACIÓ: PROMOVIENDO

Documento similar