【发布时间】:2021-07-26 09:26:32
【问题描述】:
我正在尝试将一个字符串变量拆分为多个虚拟编码变量。我使用这些资源来了解如何在 SPSS 中完成这项任务:
- https://www.ibm.com/support/pages/making-multiple-string-variables-single-multiply-coded-field
- https://www.spss-tutorials.com/spss-split-string-variable-into-separate-variables/
但是当我尝试使第一个适应我的需要或尝试将第二个转换为宏时,我失败了。
在我的数据集中,我有(多个)变量,其中包含一个逗号分隔的字符串,表示所选项目的不同组合(以及缺失值)。对于特定变量的每个项目,我想创建一个虚拟变量。如果该项目被选中,它应该在新的虚拟变量中用 1 表示。如果未选择,则该情况应以 0 表示。 不同的输入变量可以包含不同数量的项目。
例如:
| ID | VAR1 | VAR2 | DMMY1_1 | DMMY1_2 | DMMY1_3 |
|---|---|---|---|---|---|
| 1 | 1, 2 | 8 | 1 | 1 | 0 |
| 2 | 1 | 1, 3 | 1 | 0 | 0 |
| 3 | 3, 1 | 2, 3, 1 | 1 | 0 | 1 |
| 4 | 2, 8 | 0 | 0 | 0 |
这是我到目前为止想出的......
* DEFINE DATA.
DATA LIST /ID 1 (F) VAR1 2-5 (A) VAR2 6-12 (A).
BEGIN DATA
11, 28
21 1, 3
33, 12, 3, 1
4 2, 8
END DATA.
* MACRO SYNTAX.
* DEFINE VARIABLES (in the long run these should/will be inside the macro function, but for now I will leave them outside).
NUMERIC v1 TO v3 (F1).
VECTOR v = v1 TO v3.
STRING #char (A1).
DEFINE split_var(vr = TOKENS(1)).
!DO !#pos=1 !TO char.length(!vr).
COMPUTE #char = char.substr(!vr, !#pos, 1).
!IF (!#char !NE "," !AND !#char !NE " ") !THEN
COMPUTE v(NUMBER(!#char, F1)) = 1.
!IFEND.
!DOEND.
!ENDDEFINE.
split_var vr=VAR1.
EXECUTE.
由于我遇到的错误数不胜数,因此很难缩小我的问题范围。但我认为这个问题与我使用char.length() 函数的方式有关(我对何时使用bang 运算符有点困惑)。
如果有人有一些见解,我真的很感激一些帮助:)
【问题讨论】:
-
您示例中的虚拟变量似乎与您的任何一个原始分隔文本变量都不对应。