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
。对于您的第一块代码,请尝试修复您的循环定义-它完全有缺陷-然后看看其余的是否工作得更好。