Recoding multiple variables at the same time

时间:2019-04-08 13:21:36

标签: python spss

So I want to loop over 200 variables (they are not in order) and recode string answers into codes. I have a codeframe list in excel with over 2000 different codes for each string. So as they are not in order I would like to use python in SPSS to do that, but as i'm new to that i don't know how to write actual recode code.

begin program.
import spss 
for v in ['a','b','c']: #list of variables I want to loop over
 # MISSING RECODE part ("string1"=1) ("string2"=2) ("string3"=3) etc.... up to whatever number of codes I want   
end program.

Could you please help with with missing part of code, I mean how the syntax should look like?

Thanks M

2 个答案:

答案 0 :(得分:2)

正如@ eli-k的答案指出的那样,您无需在Python中循环或执行任何操作即可将相同的编码方案应用于多个变量。 Vanilla SPSS语法处理得很好。但是,具有超过2000个字符串到代码的配对可能会出现问题。 (有时候我很难调试只有20对的RECODE语法。)

解决方案是使用AUTORECODE工具及其APPLY TEMPLATE选项:

AUTORECODE var1 var2 var3 
  /INTO nvar1 nvar2 nvar3 
  /APPLY TEMPLATE = 'my_template.sat'

SPSS用作模板的.sat文件只是具有不同扩展名的.sav文件的特例。它们具有两个变量:一个名为“ Source_”的字符串和一个名为“ Target_”的数字变量(请注意大写字母和结尾的下划线)。只要使用这些变量名,就可以创建自己的模板,方法是将字符串到代码的映射从Excel导入SPSS,然后另存为.sat文件。

使用AUTORECODE时要注意的一件事:在数据中找到的,不在Source_列中的任何字符串都将被自动分配新的代码。

答案 1 :(得分:1)

在SPSS语法中,您可以一次对多个变量使用相同的重新编码模式,而无需完全循环,例如:

recode var1 var2 var3 ("apple"=1)("orange"=2)("banana"=3) into Nvar1 Nvar2 Nvar3.

如果要从字符串重新编码为数字,则必须重新编码为新变量。 或者,如果您不想使用新变量,则可以执行以下操作:

recode var1 var2 var3 ("apple"="1")("orange"="2")("banana"="3").
alter type var1 var2 var3 (f6.2).