SPSS-фильтрация случаев на основе завершения ответа

В настоящее время я пытаюсь очистить довольно большой набор данных, однако я заметил, что значительное количество участников не смогли завершить опрос или даже не ответили на первый вопрос. Тем не менее, их данные были включены в мой набор данных.

Вопрос: Есть ли способ отфильтровать участников по завершению ответа? Например, я хотел бы отфильтровать все случаи, которые не дали ответа, по крайней мере, на 30% от общего числа вопросов.

Заранее спасибо!

3 ответа

Да.

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

COUNT
countmiss = v1 v2 v3 v4 v5 v6  (MISSING).

Затем вы захотите отфильтровать участников, которые пропустили указанное количество ответов (здесь я собираюсь отфильтровать людей, пропустивших два ответа):

USE ALL.
COMPUTE filter_$=(countmiss >= 2).
VARIABLE LABEL filter_$ countmiss >= 2 (FILTER)'.
VALUE LABELS filter_$  0 'Not Selected' 1 'Selected'.
FORMAT filter_$ (f1.0).
FILTER BY filter_$.
EXECUTE.

Обратите внимание, что второй шаг может быть достигнут через меню "Данные" -> "Выбрать случаи".

@eli-k сделал важный шаг, если вы хотите учесть строковые переменные.

Если у вас есть набор данных с большим количеством переменных, и вы хотите сэкономить, набирая длинный список имен переменных, вы можете динамически генерировать список числовых переменных и одну из строковых переменных с помощью плагина Python (который должен быть установлен).

Следующий код создает два макроса "! Numericvars" и "! Stringvars". При вызове они будут расширены до соответствующего списка переменных.

BEGIN PROGRAM.
import spss

#create separate strings of numeric and string variables 
numericvars=''
stringvars=''
varcount=spss.GetVariableCount()
for i in xrange(varcount):
  if spss.GetVariableType(i) > 0: 
    stringvars=stringvars + " " + spss.GetVariableName(i)
  else: 
    numericvars=numericvars + " " + spss.GetVariableName(i)

# define macro variables for the numeric and the string variable lists
spss.SetMacroValue("!numericvars", numericvars)
spss.SetMacroValue("!stringvars", stringvars)
END PROGRAM.

(Я взял большую часть кода на примере справочной страницы синтаксиса spss.SetMacroValue)

В пределах COUNT Затем вам нужно просто ввести имена макросов вместо целых списков переменных.

COUNT countmiss = !numericvars (MISSING)
                  !stringvars ("").

Тогда вы можете использовать SELECT IF команда, предложенная @eli-k.

SELECT IF countmiss < 20./* pick your best suited limit instead of "20".

Это удалит все случаи с 20 или более пропущенными ответами навсегда из вашего набора данных.

Или вы можете использовать FILTER BY команда, предложенная @maxwelldeux:

COMPUTE filter_$ = (countmiss<20).
FILTER BY filter_$.

В этом случае данные от респондентов с 20 или более пропущенными ответами не будут использоваться в программных процедурах, пока фильтр активен, пока данные все еще остаются в наборе данных.

@maxwelldeux прав в использовании COUNT, но вам нужно сосчитать как отсутствующие числовые переменные, так и пустые текстовые переменные (текстовая переменная не обязательно определяется как отсутствующая, когда она пуста). Так:

COUNT countmiss = numvar1 numvar2 numvar3 numvar4 numvar5 (MISSING)
                  textVar1 textVar2 textVar3 textVar4 textVar5 ("").

На этом этапе вы можете отфильтровать файл, как предложено @maxwelldeux, если вы хотите сохранить пустые (или почти пустые) строки в файле, просто чтобы не включать их в анализ. Если вы уверены, каких участников вы не собираетесь включать в файл, вы можете использовать:

SELECT IF countmiss < 20./* pick your best suited limit instead of "20".

Тем не менее, убедитесь, что после ВЫБОРА сохранить файл с новым именем и использовать его в качестве рабочего файла. Таким образом, вы всегда можете вернуться к необработанным данным и снова запустить синтаксис с изменениями, если вам нужно.

Другие вопросы по тегам