Reacomodo de valores en variables

10 views
Skip to first unread message

Pessoasc

unread,
Nov 25, 2009, 12:36:15 AM11/25/09
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.

Reply all
Reply to author
Forward
0 new messages