2017-01-06 2 views
1

У меня есть набор данных, как например:SPSS: с использованием IF функции с REPEAT, когда каждый случай имеет несколько связанных экземпляров

Case #|DateA |Drug.1|Drug.2|Drug.3|DateB.1 |DateB.2 |DateB.3 |IV.1|IV.2|IV.3 
------|------|------|------|------|--------|---------|--------|----|----|---- 
1  |DateA1| X | Y | X |DateB1.1|DateB1.2 |DateB1.3| 1 | 0 | 1 
2  |DateA2| X | Y | X |DateB2.1|DateB2.2 |DateB2.3| 1 | 0 | 1 
3  |DateA3| Y | Z | X |DateB3.1|DateB3.2 |DateB3.3| 0 | 0 | 1 
4  |DateA4| Z | Z | Z |DateB4.1|DateB4.2 |DateB4.3| 0 | 0 | 0 

Для каждого случая, есть связанные переменные, т.е. Drug.1 связан с DateB.1 и IV.1 (Переменная индикатора.1); Drug.2 связан с DateB.2 и IV.2 и т. Д.

Переменная IV.1 only = 1, если Drug.1 - это тот случай, который я хочу проанализировать (в этом примере я хочу проанализировать каждый получение препарата «Х») и т. д. для других переменных IV. В противном случае IV = 0, если препарат для этого сценария не является «Х».

Я хочу рассчитать разницу между DateA и DateB для каждого экземпляра, где получен препарат «X».

например. В приведенном выше примере я хочу, чтобы вычислить новую переменную:

DateDiffA1_B1.1 = DateA1 - DateB1.1 
DateDiffA1_B2.1 = DateA1 - DateB2.1 
DateDiffA1_B1.3 = DateA1 - DateB1.3 
DateDiffA1_B2.3 = DateA1 - DateB2.3 
DateDiffA1_B3.3 = DateA1 - DateB3.3 

я не уверен, если это новая переменная должны быть связаны с каждым экземпляром Drug «X», как и для других переменных, или если он может быть единственной переменной, которая СЧИТАЕТ все экземпляры для каждого случая.

Конечная цель - указать, сколько раз каждый случай имел разницу в дате от < = 2 недели, когда они получали препарат «X». Если они не получали препарат «Х», я не хочу использовать дату разницы.

В конечном итоге я хочу сравнить тех, кто получил лекарство «Х» с разницей в времени < = 2 недели тем, кто этого не сделал, поэтому наличие другой индикаторной переменной, чтобы помочь разделить этих конкретных пациентов, было бы полезно.

Я не уверен в лучшем способе этого; Я подозреваю, что для этого потребуется комбинация функций IF и REPEAT с использованием переменной IV, но я относительно новичок в SPSS и синтаксисе и не знаю, как это кодировать, чтобы избежать ошибок.

Благодарим за помощь!

EDIT: Кажется, мне может понадобиться использовать IV в качестве векторной переменной для циклического преобразования связанных переменных в каждом случае. Я пробовал синтаксис ниже без толка:

DATASET ACTIVATE DataSet1. 
vector IV = IV.1 to IV.3. 
    loop #i = .1 to .3. 
do repeat DateB = DateB.1 to DateB.3 
       /DrugDateDiff = DateDiff.1 to DateDiff.3. 
    if IV(#i) = 1 
    /DrugDateDiff = datediff(DateA, DateB, "days"). 
end repeat. 
end loop. 
execute. 

ответ

1

На самом деле нет необходимости добавлять вектор и петлю, все, что вам нужно может быть сделано в течение одного DO REPEAT:

compute N2W=0. 
do repeat DateB = DateB.1 to DateB.3 /IV=IV.1 to IV.3 . 
    if IV=1 and datediff(DateA, DateB, "days")<=14 N2W = N2W + 1. 
end repeat. 
execute. 

Этот синтаксис сначала положит ноль в переменной count N2W. Затем он будет проходить через все даты, и только если соответствие IV равно 1, синтаксис сравнит их с dateA и добавит 1 к счету, если разница равна < = 2 недели.

если вы предпочитаете хранить переменную счетчика как отсутствующий, когда ни один из IV не 1, а compute N2W=0. начать синтаксис с:

If any(1, IV.1 to IV.3) N2W=0. 
+0

Благодарим Вас за ответ Eli-к! Я использовал ваш код с модификацией попытки включить дополнительную переменную, которая дает абсолютный датифик, прежде чем перейти к шагу подсчета этих <= 2 недель: 'если есть (1, IV.1 - IV .3) DrugDateDiff = 0. do повтор DateB = DateB.1 до DateB.3 /IV = IV.1 - IV.3 /DrugDateDiff = DrugDateDiff.1 to DrugDateDiff.3. , если IV = 1 /DrugDateDiff = dateiff (DateA, DateB, "days"). конец повтор. execute.' Однако, когда я запускаю это, он говорит, что переменная DrugDateDiff ранее не определена. – ScienceStudent

+0

Я хочу создать переменную каждый раз от IV.1 до IV.3 = 1, то есть DrugDateDiff.1 до DrugDateDiff.3, если каждый IV = 1. – ScienceStudent

+0

(1) вы используете 'DrugDateDiff' дважды - один раз, когда ваш счетная переменная и один раз в команде 'DO REPEAT '. Просто измените один из них. (2) Удалите "/" в команде 'IF'. –

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