Вычислительная переменная с использованием SYSMIS - PullRequest
2 голосов
/ 16 апреля 2019

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

Я пытаюсь вычислить переменную следующим образом:

COMPUTE A=$SYSMIS.
IF B=$SYSMIS A=$SYSMIS.
IF C > SUM(B, 1) A= 1.
IF C = SUM(B, 1) A= 2.
IF C = B A= 2.
IF C < B A=3.

Это работает нормально, за исключением того факта, что когда B = $ SYSMIS, есть очень четкие примеры A, которые на самом деле не отсутствуют.

Я протестировал его, используя:

TEMP.
SELECT IF B=$SYSMIS.
FREQ A.

Этоговорит мне, что «в эту процедуру не было введено ни одного случая. Либо нет ни одного в рабочем файле данных, или все они были отфильтрованы».

То есть код работал правильно.

Но ... Я обнаружил более 1000 случаев, которые не соответствуют этой логике.

TEMP.
SELECT IF ID=102.
FREQ A B.

Это показывает конкретный идентификатор, которыйимеет A = $ SYSMIS и B = 2.

enter image description here

A, B и C все числовые.

Заранее благодарим залюбое понимание!(

1 Ответ

2 голосов
/ 16 апреля 2019

Во-первых, вместо IF B=$SYSMIS вы должны использовать if missing(B) - для вычислений, для анализа и для выбора.
Другая вероятная причина ваших результатов в таких командах:

IF C > SUM(B, 1) A=1.

Если B отсутствует, результат SUM(B, 1) равен 1. Поэтому, если C>1 A получает значение 1, несмотря на отсутствие B. Есть два способа преодолеть это.
Во-первых, использование X+Y вместо sum(X,Y) приведет к отсутствию значения при отсутствии X или Y:

IF C > (B + 1) A=1.

Второй вариант: поместите команду COMPUTE A=$SYSMIS. в конец синтаксиса вместо начала, поэтому любые значения, введенные в A при отсутствии B, будут заменены отсутствующим значением.

...