如何拆分数据并赋值给指定的变量?

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 相关的来源,例如

this FAQ

this paper

this paper.