es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

En SPSS, bucle dentro de un “Do repeat”.

Mientras realizo la gestión de datos en SPSS, estoy tratando de ver si un individuo estaba de baja por enfermedad en cualquier día dado, de 1 a 365 días a partir de una fecha de referencia. Por lo tanto, si el individuo está de baja por enfermedad en alguna de estas fechas, quiero un “1” en una variable correspondiente a ese día (v1-v365). He probado diferentes aplicaciones del comando LOOP y Do Repeat, pero tengo que darme cuenta de que no entiendo completamente la lógica detrás de ello.

Datos:

”’

data list list / ID(F2) Index(F11) Start_Sick(F11) End_Sick(F11).

BEGIN DATA.

1, 13808188800, 13770777600, 13839125500

2, 13837564800, 13705811200, 13839020000

3, 13807497600, 13847548800, 13855017600

4, 13841107200, 13839120000, 13855017600

5, 13830307200, 13847068800, 13855017600

end data.

dataset name MyData WINDOW=FRONT.

Formats Index Start_Sick End_Sick(date11).

VARIABLE LABELS Start_Sick ‘Inicio de un período de baja por enfermedad’.

VARIABLE LABELS End_Sick ‘Fin de un período de baja por enfermedad’.

VARIABLE LABELS Index ‘Fecha de referencia’.

”’
Mi solución no funciona:

”’

VECTOR v(365).

do repeat t = v1 to v365

/v = v1 to v365.

LOOP cnt=1 TO 365 by 1.

IF Start_Sick LE datesum(Index,cnt,’days’) and End_Sick GE datesum(Index,cnt,’days’) t = 1.

END LOOP.

end repeat.

EXECUTE.

”’
Cuando ejecuto el código, obtengo ‘1’ en todos los valores de v1 a v365 para un caso o todos son missing. ¿Estoy usando las herramientas incorrectas o las estoy utilizando incorrectamente?

Saludos,
Björn

Tags:  ,

Answer

  1. Avatar for davy.ai

    Solución

    Tu solución no funcionó debido a algunos errores. Primero, definiste el vector v incorrectamente. El siguiente código crea un vector con 365 variables (no valores):

    VECTOR v(365).
    

    Para crear valores, debes usar la siguiente sintaxis:

    VECTOR v(365).
    
    LOOP #i = 1 to 365.
    COMPUTE v(#i) = 0.
    END LOOP.
    

    Este código inicializa todos los valores en el vector con 0.

    Segundo, la sintaxis de do repeat no es correcta. Aquí tienes la sintaxis correcta:

    do repeat t = v1 to v365.
    LOOP #cnt=1 TO 365 by 1.
    IF Start_Sick LE datesum(Index,#cnt,'days') and End_Sick GE datesum(Index,#cnt,'days') v(t) = 1.
    END LOOP.
    end repeat.
    

    Este código recorre cada día (1-365) y verifica si la persona estaba de baja por enfermedad ese día. Si es así, asigna un valor de 1 a la variable correspondiente en el vector v. De lo contrario, la variable se mantiene en 0.

    Finalmente, para ver los resultados, puedes usar la siguiente sintaxis:

    execute.
    list ID Index Start_Sick End_Sick v1 TO v365.
    

    Este código lista todas las variables (incluido el nuevo vector v) para cada caso. Puedes ver si la persona estaba de baja por enfermedad en cada día verificando el valor correspondiente en el vector v.

    Espero que esto te haya ayudado. Avísame si tienes alguna otra pregunta.

Comments are closed.