2016-10-22 2 views
1

Начиная с использования SPSS/Python, мне нужно усреднять переменные, имена которых содержат две разные строки. Я нашел много примеров для отдельных строк (или чисел и т. Д.), Но мои строки не смежны.Python/SPSS: шаблон в именах не последователен

var1_blabla_def_blabla_jkl

var2_blabla_blabla_def_jkl

var3_blabla_jkl_blabla_blabla

Как получить среднее значение над var1 и var2, содержащий "DEF" и "JKL", а не var3, который содержит только JKL? Я не уверен, что будет для этого шаблона регулярным выражением, и как затем передать это во что-то вроде spss.Submit ('compute% s = mean (% s))

Большое спасибо за любую помощь и подсказки, я ценить это.

ответ

1

Создание некоторые поддельные данные:

data list list/rowID var1_blabla_def_blabla_jkl var2_blabla_blabla_def_jkl var3_blabla_jkl_blabla var4_jkl_blabla_def var5_blabla_def_blabla. 
begin data 
1 20 30 40 50 60 
2 21 31 41 51 61 
3 22 32 42 52 62 
4 23 33 43 53 63 
end data. 

Теперь следующий рассчитает новую переменную, которая является средством всех других переменных, кто имена содержат как «JKL» и «DEF»:

begin program. 
import spss, spssaux 
origVars=spssaux.GetVariableNamesList() 
filtVars=filter(lambda v: 'def' in v and 'jkl' in v, origVars) 
spss.Submit("compute MNvar=mean(%s)." %(", ".join(filtVars))) 
end program. 
+0

Отлично, работает красиво. Большое вам спасибо, это большая помощь! –

3

Вы можете упростить это дальше двумя способами. Во-первых, объект spssaux.VariableDict имеет встроенный механизм фильтрации с использованием регулярного выражения. Таким образом, вы могли бы написать
ВАР = spssaux.VariableDict (шаблон = "(* JKL) |. (* DEF).) Переменные
, чтобы получить список

Второй способ будет использовать SPSSINC SELECT.. VARIABLES, который входит в состав Python Essentials для генерации макроса в соответствии с критериями выбора, которые включают шаблоны имен, тип переменных и другие свойства, которые затем могут использоваться в регулярном синтаксисе. Команда появляется в меню «Утилиты» как «Определить переменную» Макро.

+0

Отлично, спасибо, (pattern = "(. * Jkl) | (. * Def)) также работает. Я не знал структуру этого выражения. Большое спасибо! –

+0

vars = spssaux.VariableDict (pattern = "(. * Correct)"). Variables –

+0

К сожалению: vars = spssaux.VariableDict (pattern = "(. * Jkl) | (. * Def))". Variables –

Смежные вопросы