2015-03-17 3 views
2

Я хочу рассчитать дни, когда субъект не получал лечение («0» в моем файле. Если субъект получил лечение, он обозначается «1». курсы лечения, и я хотели бы считать дни между первым и вторым лечением я (пока) не заинтересован в период между второй и третьей обработкой в основном мой SPSS файл выглядит следующим образом:..spss подсчет первых последовательных нулей по переменным

idday1day2day3day4day28
A --- 1 ----- 0 ----- 0 ---- 1 ------ 0
B --- 1 ---- 0 ----- 1 ---- 0 ------ 1
C --- etc

Меня интересует только первая серия нулей. Выход я надеюсь получить это:

idfirst_series_zero
A2
B1
C...

Может кто-нибудь поможет мой выход, здесь. Очевидно, что подсчет всех нулей не будет работать, потому что в одной строке могут быть несколько наборов нулей.

Cheers, Дилан

+0

Какой у вас код? – m0meni

ответ

1

Вот один довольно общий подход, который позволит рассчитать время между всеми различными процедурами. Сначала я создаю вектор, в котором хранятся местоположения всех обработок, Loc1 TO Loc5 (с использованием в качестве примера day1 - day5).

DATA LIST FREE/day1 day2 day3 day4 day5. 
BEGIN DATA 
1 0 0 1 0 
1 0 1 0 1 
END DATA. 

VECTOR day = day1 TO day5. 
VECTOR Loc(5,F2.0). 
COMPUTE #id = 1. 
LOOP #i = 1 TO 5. 
    DO IF day(#i) = 1. 
    COMPUTE Loc(#id) = #i. 
    COMPUTE #id = #id + 1. 
    END IF. 
END LOOP. 

Теперь, если вы запустите это преобразование, то Loc вектор будет выглядеть для этого примера данных.

Loc1 Loc2 Loc3 Loc4 Loc5 

    1 4 . . . 
    1 3 5 . . 

Теперь, чтобы вычислить значение для первой серии так же просто, как:

COMPUTE first_series_zero = Loc2 - Loc1 - 1. 

Это вернет отсутствует, если никогда не второй (или первый) лечение, и не зависит от day1 всегда являющийся первым днем ​​лечения. Теперь рассчитать разницу между всеми видами лечения довольно просто, а вот подход DO REPEAT.

VECTOR DifS(4,F2.0). 
DO REPEAT F = Loc1 TO Loc4 /B = Loc2 TO Loc5 /D = DifS1 TO DifS4. 
    COMPUTE D = B - F - 1. 
END REPEAT. 

И так DifS1 бы нули между 1-й и 2-й лечения, DifS2 бы нули между 2-й и 3-й лечения и т.д. (И это же повторить и первый цикл может быть более эффективным с цикл, который допускает только действительные/возможные значения.)

+0

Спасибо Andy W. Это сработало просто отлично! – Dylan

Смежные вопросы