Pessoasc
unread,Nov 25, 2009, 12:36:15 AM11/25/09Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to SPSSEnMexico, edgar....@gmail.com
Que tal,
Hace unos días recibí una base de datos que contenía la información
por posiciones y necesitaba entregar la base de datos con toda la
información arrimada hacia la primera posición.
Para explicarlo mejor lo ejemplificaré:
Así recibí la base de datos:
P1_1 P1_2 P1_3 P1_4 P1_5
. . 3 . 5
1 . . 4 5
. 2 3 4 5
1 . . . 5
Y la tenía que entregar así:
P1_1 P1_2 P1_3 P1_4 P1_5
3 5
1 4 5
2 3 4 5
1 5
Para ello empleé un procedimiento que ya le había recomendado a
Capitan Decima para limpieza de variables, y que ahora se los recuerdo
a fin de demostrar que puede ser muy útil en éste tipo de problemas.
Empezaré creando la base de ejemplo:
* Creando una base de datos de ejemplo.
DATA LIST LIST (",") /P1_1 P1_2 P1_3 P1_4 P1_5 .
BEGIN DATA
, , 3, ,5
1, , , 4, 5
, 2, 3, 4, 5
1, , , , 5
END DATA.
* Ahora creo unos contenedores temporales para la información que voy
a reacomodar .
COMPUTE P1_1T = P1_1 .
COMPUTE P1_2T = P1_2 .
COMPUTE P1_3T = P1_3 .
COMPUTE P1_4T = P1_4 .
COMPUTE P1_5T = P1_5 .
EXEC .
* Y ahora limpio las variables destino .
COMPUTE P1_1 = $SYSMIS .
COMPUTE P1_2 = $SYSMIS .
COMPUTE P1_3 = $SYSMIS .
COMPUTE P1_4 = $SYSMIS .
COMPUTE P1_5 = $SYSMIS .
EXEC .
* En seguida aplico el algoritmo que ya habíamos visto anteriormente
pero con unos pequeños cambios .
LOOP #I=1 TO 999 .
- DO IF (P1_1T = #I | P1_2T = #I | P1_3T = #I | P1_4T = #I |
P1_5T = #I).
- DO IF (SYSMIS(P1_1)).
- COMPUTE P1_1 = #I .
- ELSE IF (SYSMIS(P1_2)).
- COMPUTE P1_2 = #I .
- ELSE IF (SYSMIS(P1_3)).
- COMPUTE P1_3 = #I .
- ELSE IF (SYSMIS(P1_4)).
- COMPUTE P1_4 = #I .
- ELSE .
- COMPUTE P1_5 = #I .
- END IF.
- END IF.
END LOOP.
EXECUTE.
* Ya terminada la reasignación de valores reacomodados borro las
variables temporales .
DELETE VAR P1_1T P1_2T P1_3T P1_4T P1_5T .
¿Qué les parece?
Reciban saludos.
Sergio Pessoa.