微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何拆分数据并将其分配到指定的变量中?

如何解决如何拆分数据并将其分配到指定的变量中?

我在 Stata 中有关于当前情况感觉的数据。有七种感受。数据按如下格式存储(注意数据类型是字符串,一个人可以回复1个以上)

感觉
4,7
1,3,4
2,5,6,2,4,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 标签维基中解释的形式给出你的例子,因为它更有帮助,然后给出代码来获取你想要的变量作为数字变量。

* 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,4,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,4         1         1         .         0         3         1 |
  3. |       2,7         .         0         2         1         .         0 |
  4. | 1,7         1         1         2         1         3         1 |
     +---------------------------------------------------------------------------+

如果你想要一个由

产生的字符串结果
 gen wanted`j' = "`j'" if strpos(feeling,"`j'") 

如果感觉的数量为 10 或更多,您将需要更仔细的代码,例如搜索 "1" 会在 "10" 内找到它。

具有不同值 1 或 0 的指标(有人说是虚拟的)变量对于此类数据的大多数分析来说更有价值。

注意Stata相关的来源,例如

this FAQ

this paper

this paper

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。