String SPSS根据内容将字符串变量拆分为两个或三个独立的新变量

String SPSS根据内容将字符串变量拆分为两个或三个独立的新变量,string,split,spss,String,Split,Spss,我试图把一个变量分成两个或三个独立的部分,但就我的一生而言,我无法让它工作 我想把一个字符串ADATE10分成两部分ADATE/10,或者把一个字符串F8.2分成F/8/2。 例如,起始变量如下所示: +-------------+ | PrintFormat | +-------------+ | A10 | | F4 | | ADATE10 | | F8.2 | | F4.1 | | A100 | +----

我试图把一个变量分成两个或三个独立的部分,但就我的一生而言,我无法让它工作

我想把一个字符串
ADATE10
分成两部分
ADATE
/
10
,或者把一个字符串
F8.2
分成
F
/
8
/
2
。 例如,起始变量如下所示:

+-------------+
| PrintFormat |
+-------------+
| A10         |
| F4          |
| ADATE10     |
| F8.2        |
| F4.1        |
| A100        |
+-------------+
我想说的是:

+-------------+-------+-------+-------+
| PrintFormat | typeA | typeW | typeD |
+-------------+-------+-------+-------+
| A10         | A     | 10    |       |
| F4          | F     | 4     |       |
| ADATE10     | ADATE | 10    |       |
| F8.2        | F     | 8     | 2     |
| F4.1        | F     | 4     | 1     |
| A100        | A     | 100   |       |
+-------------+-------+-------+-------+
我的主要编程经验是C#和一些VBA宏,下面是我在SPSS中尝试的方法。基本上,我想向后循环字符串值中的字符,当字符是
时,thusfar是十进制,当字符不是数字时,thusfar是宽度部分,其余到开头是数据类型指示符:

* add the new variables

string typeA(a50).
string typeW(a50).
string typeD(a50).

* split from the existing variable

string #char(a1).
string #part(a50).
compute #part = "".
compute #partindex = 1.

loop #pos = char.substr(PrintFormat,#pos,1) to 1.
    compute #char = char.substr(PrintFormat,#pos,1).

    do if (#char = ".").
        compute typeD = #part.
        compute #part = "".
    else if (MISSING(NUMBER(#char, f4)) AND #partindex = 1).
        compute typeW = #part.
        compute #part = "".
        compute #partindex = 0.
    end if.

    compute #part = concat(#part, #char).
    * COMPUTE #pos = #pos - 1. * ??
END loop.
compute typeA = #part.
execute.
这导致了太多错误,我甚至不知道从哪里开始,而且我似乎无法正确调试它,因此我尝试了一种更简单的方法,只使用
索引
替换
,如下所示:

if (INDEX(PrintFormat, "A") = 1) COMPUTE typeA = "A".
if (INDEX(PrintFormat, "F") = 1) COMPUTE typeA = "F".
if (INDEX(PrintFormat, 'ADATE') = 1) COMPUTE typeA = "ADATE".

COMPUTE typeW = replace(PrintFormat, typeA, "").

COMPUTE #posdec = char.index(typeW, ".").
if (#posdec > 0) COMPUTE typeD = char.substr(typeW, #posdec, 2).

execute.
但这也在第一行给出了一个错误

在中的目标变量后出现异常时,未找到等号 计算命令


所以在做了很长一段时间之后,我现在必须让它休息一下。我只能说SPSS语法的工作原理与我预期的大不相同。我做错了什么?我如何在SPSS中将这样的字符串值拆分为单独的位?

注意-在您的第二个代码块中,在
if
之后,您不应该添加
compute
。例如,在
中(#posdec>0)COMPUTE typeD=char.substr(typeW,#posdec,2)。
您应该去掉
COMPUTE
。在同一块中,您使用了几次
index
,这应该是
char.index
。对于您的第一块代码,请尝试修复您的循环定义-它完全有缺陷-然后看看其余的是否工作得更好。