Проверить существование значений с помощью синтаксиса spss - PullRequest
1 голос
/ 04 июля 2019

Я должен проверить наличие значений, основанных на некоторых условиях.

т.е. у меня есть 3 переменные, varA, varB и varC.varC не должен быть пустым, только если varA> varB (условие).

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

if missing(varC) and (varA>varB) ck_varC=1.
if not(missing(varC)) and not(varA>varB) ck_varC=2.
exe.
fre ck_varC.
exe.

У меня были некоторые ошибки, когда условие усложнялось, и когда в условии отсутствуют () или другие функции, но я мог ошибиться.

Как вы думаете, существует более простой способделать эти проверки?

спасибо заранее

РЕДАКТИРОВАТЬ: вот пример того, что я имею в виду, подумайте в вопроснике с некоторым маршрутом, вы спрашиваете возраст для любого, если они между 17 и 44спросите их, работают ли они, спросите ли их, сколько часов.

Example

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

Есть ли более простой способ сделать это?всегда ли эта структура действительна независимо от того, каково условие?

1 Ответ

1 голос
/ 04 июля 2019

В SPSS пропущенные значения не являются числами. Вам также необходимо явно программировать эти сценарии. varC покрыт (частично), но ни один сценарий, в котором varA или varB отсутствуют пропущенные данные, не покрыт.

(Хорошая практика: возможно , вы должны инициализировать вашу контрольную переменную как sysmis или 0, используя синтаксис):

numeric ck_varC (f1.0).
compute ck_varC=0.
if missing(varC) and (varA>varB) ck_varC=1.
if not(missing(varC)) and not(varA>varB) ck_varC=2.
***additional conditional scenarios go here:.
if missing(varA) or missing(varB) ck_varC=3.
...
fre ck_varC.

Кстати, вам не нужны никакие команды exe., если вы собираетесь запускать весь синтаксис.

Позже отредактируйте, после того, как постер обновил вопрос:

Ваш синтаксис будет примерно таким. Обратите внимание на использование функции range, которая не является обязательной, но может пригодиться вам в будущем. Я также предполагаю, что work является строковой переменной, поэтому на ее значения необходимо ссылаться с помощью кавычек.

if missing(age) ck_age=1.
if missing(work) and range(age,17,44) ck_work=1.
if missing(hours) and work="yes" ck_hours=1.
if not (missing (age)) and not(1>0) ck_age=2. /*this will never happen because of the not(1>0).
if not(missing(work)) and (not range(age,17,44)) ck_work=2. /*note that if age is missing, this ck_work won't be set here.
if not(missing(hours)) and (not(work="yes")) ck_hours=2.
EXECUTE.

Строковые переменные чувствительны к регистру В строках нет эквивалента missing; пустая пустая строка ("") по-прежнему является строкой. not(work="yes") равно True, если work пусто ("").

...