如何拆分数据并赋值给指定的变量?
How to split data and assign it into designated variables?
我在Stata中有关于当前情况感觉的数据。有七种感觉。数据存储格式如下(注意数据类型为字符串,一个人可以回复1个以上的回答)
感觉
4,7
1,3,4
2,5,6,7
1,2,3,4,5,6,7
由于数据是字符串,我尝试用
分隔
split feeling, parse (,)
我得到了结果
感受1
感受2
感觉3
感觉4
感觉5
感觉6
感觉7
4
7
1
3
4
2
5
6
7
1
2
3
4
5
6
7
然而,这不是我想要的结果。即感觉的代表性数量应该进入正确的变量。例如.
感受1
感受2
感觉3
感觉4
感觉5
感觉6
感觉7
4
7
1
3
4
2
5
6
7
1
2
3
4
5
6
7
我不确定是否有针对此类问题的内置命令或函数。我正在考虑使用 forval
循环遍历每个变量中的每个值,并尝试将其转换为正确的变量。
在这里对不同的值进行循环就足够了。我以 Stata 标签 wiki 中解释的形式给出您的示例更有帮助,然后提供代码以获取您想要的变量作为数字变量。
* Example generated by -dataex-. For more info, type help dataex
clear
input str13 feeling
"4,7"
"1,3,4"
"2,5,6,7"
"1,2,3,4,5,6,7"
end
forval j = 1/7 {
gen wanted`j' = `j' if strpos(feeling, "`j'")
gen better`j' = strpos(feeling, "`j'") > 0
}
l feeling wanted1-better3
+---------------------------------------------------------------------------+
| feeling wanted1 better1 wanted2 better2 wanted3 better3 |
|---------------------------------------------------------------------------|
1. | 4,7 . 0 . 0 . 0 |
2. | 1,3,4 1 1 . 0 3 1 |
3. | 2,5,6,7 . 0 2 1 . 0 |
4. | 1,2,3,4,5,6,7 1 1 2 1 3 1 |
+---------------------------------------------------------------------------+
如果您想要一个由
产生的字符串结果
gen wanted`j' = "`j'" if strpos(feeling, "`j'")
如果感觉的数量为 10 或更多,您将需要更仔细的代码,例如搜索 "1"
会在 "10"
.
中找到它
对于此类数据的大多数分析,具有不同值 1 或 0 的指标(有人说是虚拟)变量更有价值。
注意与 Stata 相关的来源,例如
我在Stata中有关于当前情况感觉的数据。有七种感觉。数据存储格式如下(注意数据类型为字符串,一个人可以回复1个以上的回答)
感觉 |
---|
4,7 |
1,3,4 |
2,5,6,7 |
1,2,3,4,5,6,7 |
由于数据是字符串,我尝试用
分隔split feeling, parse (,)
我得到了结果
感受1 | 感受2 | 感觉3 | 感觉4 | 感觉5 | 感觉6 | 感觉7 |
---|---|---|---|---|---|---|
4 | 7 | |||||
1 | 3 | 4 | ||||
2 | 5 | 6 | 7 | |||
1 | 2 | 3 | 4 | 5 | 6 | 7 |
然而,这不是我想要的结果。即感觉的代表性数量应该进入正确的变量。例如.
感受1 | 感受2 | 感觉3 | 感觉4 | 感觉5 | 感觉6 | 感觉7 |
---|---|---|---|---|---|---|
4 | 7 | |||||
1 | 3 | 4 | ||||
2 | 5 | 6 | 7 | |||
1 | 2 | 3 | 4 | 5 | 6 | 7 |
我不确定是否有针对此类问题的内置命令或函数。我正在考虑使用 forval
循环遍历每个变量中的每个值,并尝试将其转换为正确的变量。
在这里对不同的值进行循环就足够了。我以 Stata 标签 wiki 中解释的形式给出您的示例更有帮助,然后提供代码以获取您想要的变量作为数字变量。
* Example generated by -dataex-. For more info, type help dataex
clear
input str13 feeling
"4,7"
"1,3,4"
"2,5,6,7"
"1,2,3,4,5,6,7"
end
forval j = 1/7 {
gen wanted`j' = `j' if strpos(feeling, "`j'")
gen better`j' = strpos(feeling, "`j'") > 0
}
l feeling wanted1-better3
+---------------------------------------------------------------------------+
| feeling wanted1 better1 wanted2 better2 wanted3 better3 |
|---------------------------------------------------------------------------|
1. | 4,7 . 0 . 0 . 0 |
2. | 1,3,4 1 1 . 0 3 1 |
3. | 2,5,6,7 . 0 2 1 . 0 |
4. | 1,2,3,4,5,6,7 1 1 2 1 3 1 |
+---------------------------------------------------------------------------+
如果您想要一个由
产生的字符串结果 gen wanted`j' = "`j'" if strpos(feeling, "`j'")
如果感觉的数量为 10 或更多,您将需要更仔细的代码,例如搜索 "1"
会在 "10"
.
对于此类数据的大多数分析,具有不同值 1 或 0 的指标(有人说是虚拟)变量更有价值。
注意与 Stata 相关的来源,例如