#spss
#spss
Вопрос:
Я хочу обновить некоторые значения переменной на основе метки значения той же переменной:
В псевдокоде:
for V in var1 to var10:
if value label of V is 'x':
set value 99
Комментарии:
1. Я ищу скриптовые решения (то есть, избегающие пользовательского интерфейса)
2. Не совсем понятно, о чем вы спрашиваете — ячейки в SPSS не содержат меток значений — они содержат значения. В определении переменной вы можете задать метки значений, которые будут привязаны к определенным значениям в выходных данных — каждая переменная может иметь несколько меток значений или ни одной, независимо от количества фактических (или потенциальных) значений в переменной.
3. Правильно, спасибо за разъяснение словаря @eli-k. Вот попытка перефразировать: учитывая ‘метку значения’ переменной, я хочу обновить ее значения (ее ячейку), поэтому, если в метках значений у нас есть что-то вроде
7 = 'x'
. Затем, учитывая ‘x’, я хочу заменить все экземпляры 7, скажем, на 99. Но проблема в том, что я не знаю, будет ли это 7 или нет — поэтому мне нужно проверить метку значения.
Ответ №1:
Сначала мы создадим некоторые поддельные данные для демонстрации на:
data list list/a1 to a3 (3f1) notforuse (f1).
begin data
1,2,2,55
2,1,4,66
3,4,1,77
end data.
value labels
a1 1 'x1' 2 'x' 3 'x3'
/a2 1 'y1' 2 'a' 3 'b' 4 'x'
/a3 1 'n' 2 'x'
/notforuse 55 'nn' 66 "x".
Теперь к реальной задаче:
* first step is to create a list of variable labels.
dataset name origdata.
DATASET DECLARE vallabs.
OMS /SELECT TABLES /IF COMMANDS=['File Information'] SUBTYPES=['Variable Values']
/DESTINATION FORMAT=SAV OUTFILE='vallabs' VIEWER=NO.
DISPLAY DICTIONARY.
OMSEND.
dataset activate vallabs.
* you now have a full list of your actual variable labels. next step is to select the variables you want to work on, and the labels you want to work on.
*to select the relevant variables.
select if any(var1 , "a1", "a2", "a3").
* can alternatively use the following: .
select if char.index(var1, "a")>0.
*to set the new values for relevant labels:.
recode label ("x"=99)("y1"=999) into newval.
select if not missing(newval).
*now use the list to create a new syntax: .
cd 'yourpathwriteable directory'
write out='val lab syntax.sps' /"if ", var1, " = ", var2, " ", var1, " = ", newval, ".".
exe.
*now use the new syntax in the original data:.
dataset activate origdata.
insert file= 'val lab syntax.sps'.
exe.