在 SPSS 中将字符串变量拆分为几个数字变量

split String Variable in few numeric Variables in SPSS

我有一个用逗号分隔的数字的字符串变量,我想将其拆分为四个数字变量。

makeArr var1a var1b var1c var1d
6,8,13,10 6 8 13 10
10,11,2 10 11 2
7,1,14,3 7 1 14 3

与:

 IF (CHAR.INDEX(makeArr,',') >= 1) 
   f12a=CHAR.SUBSTR(makeArr,1,CHAR.INDEX(makeArr,',')-1).
 EXECUTE.
 
 IF (CHAR.INDEX(makeArr,',') >= 1) 
   f12b=CHAR.SUBSTR(makeArr,CHAR.INDEX(makeArr,',')+1,CHAR.INDEX(makeArr,',')-1).
 EXECUTE.

我总是毫无问题地写入第一个变量。 这不再适用于第二个变量,因为它的长度不同,逗号也写在这里。

所以我需要在逗号处进行分隔,并在逗号上分隔数字。

由于 char.substr 只会告诉您搜索字符串第一次出现的位置,您需要从新位置开始第二次搜索 - 在第一次出现之后,这会越来越多随着你的继续变得复杂。我的建议是创建一个数组变量的副本,您将在继续操作时将其切掉 - 这样您每次都只搜索第一次出现的“,”。

首先,我重新创建了您的示例数据以进行演示。

data list free/makeArr (a20).  
begin data  
"6,8,13,10" "10,11,2" "7,1,14,3"  
end data.  

现在我将您的数组复制到一个新变量中 #tmp。请注意,我在末尾添加了一个“,”,这样数组的所有部分的语法都保持不变。我在名字的开头加上了“#”,让它不可见,你可以去掉它。
可以在您开始执行时分步执行以下计算,但更好地循环执行这些步骤(特别是如果这是一个较长数组的示例)。

string f12a f12b f12c f12d #tmp (a20).
compute #tmp=concat(rtrim(makeArr),","). 
do repeat nwvr=f12a f12b f12c f12d.
    do  IF #tmp<>"".
        compute nwvr=CHAR.SUBSTR(#tmp,1,CHAR.INDEX(#tmp,',')-1).
        compute #tmp=CHAR.SUBSTR(#tmp,CHAR.INDEX(#tmp,',')+1).
    end if.
end repeat.
EXECUTE.