在 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.
我有一个用逗号分隔的数字的字符串变量,我想将其拆分为四个数字变量。
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.