如何将包含变量名的字符串重构为布尔值?

时间:2015-09-22 08:52:08

标签: spss

我有一个包含以下行的SPSS变量:

|2|3|4|5|6|7|8|10|11|12|13|14|15|16|18|20|21|22|23|24|25|26|27|28|29|

每一行以管道开头,以一行结束。我需要将它重构为布尔变量,如下所示:

var       var1  var2  var3  var4  var5
|2|4|5|   0     1     0     1     1

我试过这样的循环:

loop # = 1 to 72.
compute var# = SUBSTR(var,2#,1).
end loop.
exe.

我的代码不适用于2位或更多位数的长数字,也不会将值放入各自的变量中,所以我尝试将char.substr(var,char.rindex(var,'|') + 1)嵌套到另一个循环中而没有运气,因为它仍然不允许我识别变量号。

我该怎么做?

2 个答案:

答案 0 :(得分:0)

对于DO REPEAT命令来说,这看起来不错。但是类型转换有点棘手:

DO REPEAT var#i=var1 TO var72
         /i=1 TO 72.
COMPUTE var#i = CHAR.INDEX(var,CONCAT("|",LTRIM(STRING(i,F2.0)),"|"))>0).
END REPEAT.

说明:让我们从内到外:

  • STRING(value,F2.0)将数值转换为两位数的字符串(带有前导空格,其中数字只包含一位数字),例如2 - > " 2"
  • LTRIM()删除了前导空格,例如" 2" - > " 2"
  • CONCAT()连接字符串。在上面的代码中,它添加了" |"在数字之前和之后,例如" 2" - > " | 2 |"
  • CHAR.INDEX(stringvar,searchstring)返回搜索字符串的位置。如果找不到搜索字符串,则返回0。
  • CHAR.INDEX(stringvar,searchstring)>0返回一个布尔值,指示是否找到了搜索字符串。

答案 1 :(得分:0)

在Python中进行操作比使用本机SPSS语法更容易。

您可以使用SPSSINC TRANS扩展名来实现此目的。

/* Example data*/.
data list free / TextStr (a99).
begin data.
"|2|3|4|5|6|7|8|10|11|12|13|14|15|16|18|20|21|22|23|24|25|26|27|28|29|"
end data.

/* defining function to achieve task */.
begin program.
def runTask(x):
    numbers=map(int,filter(None,[i.strip() for i in x.lstrip('|').split("|")]))
    answer=[1 if i in numbers else 0 for i in xrange(1,max(numbers)+1)]
    return answer
end program.

/* Run job*/.
spssinc trans result = V1 to V30  type=0 /formula "runTask(TextStr)". 
exe.