Цикл по нескольким строковым переменным для генерации итоговой переменной присутствия / отсутствия - PullRequest
0 голосов
/ 10 октября 2018

У меня очень большой набор данных множественных диагнозов (25) на пациента, представленный кодами ICD 10 в SPSS.Для краткости я опубликовал снимок того, что я пытаюсь воспроизвести, просто используя набор тестовых данных из 3 строковых переменных, помеченных от DIAG1 до DIAG3, и случайных кодов.

enter image description here

Предположим, что каждая строка представляет пациента.Результат, представленный в столбце «O74», является тем, что я пытаюсь воспроизвести, но пока безрезультатно (просто вручную введите то, что я хочу воспроизвести с помощью синтаксиса).По существу, дихотомическая переменная присутствия / отсутствия, где «1» представляет пациента с диагнозом «O74» в любом из столбцов «DIAG».Я попытался:

do repeat x = DIAG1 to DIAG3.
compute O74 = any(x,"O74001", "O74019").
end repeat.
EXECUTE.

Тем не менее, после запуска синтаксиса, появляется только два приведенных выше кода в DIAG3.Учитывая мои невероятно слабые навыки синтаксиса, я не могу понять, почему частота O74001 и O74019 в DIAG1 и DIAG2 не включена в переменную «O74» при использовании приведенного выше кода «повторить».

В идеале я хотел бы просто включить «O74» в «do repeat» или «loop» вместо того, чтобы вводить каждый отдельный код ICD.Синтаксис:

compute flag = char.index(UPPER(DIAG2), 'O74') > 0.​

прекрасно работает, однако, поскольку закодировано, он просто работает по одному столбцу "DIAG" за раз.Учитывая невероятно большое количество пациентов (> 3 000 000) и количество диагнозов на пациента (25), включение этого в цикл было бы идеальным.Было сделано несколько попыток.

Для целей набора данных «test» переменные «DIAG» были перечислены последовательно.В фактическом наборе данных каждый DIAG разделен двумя переменными.Если решение намного проще - последовательно перечислить эти переменные, то это, безусловно, можно сделать.

Я очень благодарен за любой вклад / руководство в том, что, вероятно, является очень элементарным вопросом синтаксиса в SPSS.

1 Ответ

0 голосов
/ 11 октября 2018

Таким образом, причина, по которой ваш цикл не работает, состоит в том, что каждый раз, когда он запускает сравнение для "DIAG (X)", заменяет предыдущее сравнение, так что только последнее "выживает".Есть много способов исправить проблему, вот самый простой:

compute O74=0.
do repeat x = DIAG1 to DIAG3.
if O74=0 O74 = any(x,"O74001", "O74019").
end repeat.

Таким образом, если O74 становится равным 1 в какой-то момент, он не вернется к 0 снова в следующих циклах цикла.То же самое относится и к вашему другому синтаксису:

compute flag = 0.
do repeat x = DIAG1 to DIAG25.
if flag=0 flag = (char.index(UPPER(x), 'O74') > 0​ ).
end repeat.

Что касается порядка переменных DIAG - если они не являются последовательными, вам нужно просто назвать их по отдельности (do repeat x = DIAG1 DIAG2 DIAG3 DIAG4 ....DIAG25).В качестве альтернативы вы можете использовать следующую команду для создания списка в макросе (вы можете увидеть пример в моем ответе здесь ):

spssinc select variables macroname="!alldiags" /properties pattern="DIAG*".

После запуска вы можете использовать макрос, которыйбыл создан следующим образом:

do repeat x = !alldiags.

Обратите внимание, что любые другие переменные, начинающиеся с "DIAG", будут включены в список.Если у вас есть что-то, ищите spssinc select variables, чтобы попытаться обойти их (или начать новый вопрос!).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...