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".
Тем не менее, убедитесь, что после ВЫБОРА сохранить файл с новым именем и использовать его в качестве рабочего файла. Таким образом, вы всегда можете вернуться к необработанным данным и снова запустить синтаксис с изменениями, если вам нужно.