Python/SPSS:名字不连续的模式



开始使用SPSS/Python时,我需要对名称包含两个不同字符串的变量求平均值。我找到了许多单独字符串(或数字等)的例子,但我的字符串不是相邻的。

var1_blabla_def_blabla_jkl

var2_blabla_blabla_def_jkl

var3_blabla_jkl_blabla_blabla

我如何得到var1和var2的平均值,包含"def"one_answers"jkl",而不是var3,只包含jkl?我不确定这个模式的正则表达式是什么,以及如何将其输入到spss之类的东西中。提交("计算% s =平均(% s))

非常感谢你的帮助和提示,我很感激。

可以通过两种方式进一步简化。首先是spssaux。VariableDict对象具有使用正则表达式的内置过滤机制。所以你可以写
vars = spssaux.VariableDict(pattern="(.*jkl)|(.*def)).variables
获取列表

第二种方法是使用SPSSINC SELECT VARIABLES扩展命令,该命令包含在Python Essentials中,可以根据包括名称模式、变量类型和其他属性在内的选择标准生成宏。这可以在常规语法中使用。该命令在"实用程序"菜单中显示为"定义变量宏"。

创建一些假数据:

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"one_answers"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.

最新更新