SPSS Последнее доступное измерение в ряду переменных

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

Набор данных выглядит так:

вар1 вар2 вар3 вар4 вар5... вар100

25 30 11 . . .

30 . . . . .

44 15 22 35 16 24

. . 31 27 . .

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


person abc    schedule 11.10.2013    source источник


Ответы (2)


Конечно. Скопируйте-вставьте-запустите весь этот синтаксис, не открывая никаких данных для демонстрации.

data list free/v1 v2 v3 v4.
begin data
1 '' '' ''
1 2 '' ''
1 2 3 ''
1 2 3 4
end data.

do repeat v = v1 to v4.
if not missing(v) last_valid = v.
end repeat.
exe.

Для первого допустимого значения вы можете использовать что-то вроде синтаксиса ниже. Обратите внимание, что есть альтернатива, которая быстрее в вычислительном отношении (с использованием loop и break), но требует дополнительного кода. Если приведенный ниже код занимает много времени, я напишу для вас быструю версию, но давайте сначала попробуем простое решение.

data list free/v1 v2 v3 v4.
begin data
'' '' '' 4
 '' '' 3 4
'' 2 3 4 
1 2 3 4
end data.

numeric first_valid.
do repeat v = v1 to v4.
if not missing(v) and missing(first_valid) first_valid = v.
end repeat.
exe.
person RubenGeert    schedule 11.10.2013
comment
Спасибо! Оно работает. Я также пытался применить его, чтобы найти первое доступное измерение в строке, но, похоже, нужен другой подход :) Может быть, у вас есть идея? - person abc; 11.10.2013
comment
Пожалуйста, отметьте ответ как принятый, если он решил вашу проблему. Я добавлю версию для первого допустимого значения ниже. - person RubenGeert; 12.10.2013

Спасибо за ответ! Это помогло мне двигаться в правильном направлении. В итоге я получил альтернативный код для вычисления первого действительного измерения в строке с использованием циклов, как вы предложили.

Последнее доступное измерение в ряду измерений:

DEFINE last_valid ()
!DO !@ = 1 !TO 100.
!LET !a=!CONCAT("v",!@). 
COMPUTE last_valid = !a.
!DOEND.
!ENDDEFINE.
last_valid.
EXECUTE.

Первое доступное измерение подряд:

DEFINE first_valid ()
!DO !@ = 1 !TO 100.
!LET !a=!CONCAT("v",!@). 
LOOP IF missing(first_valid) = 1.
COMPUTE first_valid = !a.
END LOOP IF first_valid > 0.
!DOEND.
!ENDDEFINE.
first_valid.
EXECUTE.
person abc    schedule 14.10.2013