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

How to refactor string containing variable names into booleans?

我有一个包含以下行的 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) 嵌套到另一个循环中,但没有成功因为它仍然不允许我识别变量号。

我该怎么做?

这对于 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) 将数值转换为两位数字的字符串(带有前导白色 space,其中数字仅由一位数字组成),例如2 -> " 2".
  • LTRIM() 删除开头的白色space,例如" 2" -> "2".
  • CONCAT() 连接字符串。在上面的代码中它添加了“|”数字前后,例如“2”->“|2|”
  • CHAR.INDEX(stringvar,searchstring) returns 找到搜索字符串的位置。如果未找到搜索字符串,它 returns 0。
  • CHAR.INDEX(stringvar,searchstring)>0 returns 一个布尔值,表示是否找到搜索字符串。

在 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.