我有一个名为XmlReader
的变量,用于指定观察的类别。问题是某些观察有多个类别。例如:
Category
类别顺序没有意义。它们总是以“;”分隔。有250个类别,因此创建虚拟变量可能会很棘手。如果这可能有帮助,我会在单独的Excel文件中提供完整的类别列表。
我想要的只是通过经济学(3),心理学(2),生物学(1)等独特类别来总结我的数据集(所以所有数据的总和可以优于观察数量。)
答案 0 :(得分:1)
tabsplit
包的 tab_chi
将为您完成此操作。
clear
input id str42 Category
1 "Economics"
2 "Biology"
3 "Psychology; Economics"
4 "Economics; Psychology"
end
capture ssc install tab_chi
tabsplit Category, p(;)
Category | Freq. Percent Cum.
------------+-----------------------------------
Biology | 1 16.67 16.67
Economics | 3 50.00 66.67
Psychology | 2 33.33 100.00
------------+-----------------------------------
Total | 6 100.00
注意:您可以计算分号,因此可以计算这样的短语。
gen count = 1 + length(category) - length(subinstr(category, ";", "", .))
逻辑是你测量字符串的长度,它的长度应该用冒号;
替换为空字符串(即删除)。不同之处在于您添加1的分号数。
编辑:如何从上面的数据示例开始,获取不同的数据结构。
. split Category, p(;)
variables created as string:
Category1 Category2
. drop Category
. reshape long Category, i(id) j(mention)
(note: j = 1 2)
Data wide -> long
-----------------------------------------------------------------------------
Number of obs. 4 -> 8
Number of variables 3 -> 3
j variable (2 values) -> mention
xij variables:
Category1 Category2 -> Category
-----------------------------------------------------------------------------
. drop if missing(Category)
(2 observations deleted)
. list, sepby(id)
+----------------------------+
| id mention Category |
|----------------------------|
1. | 1 1 Economics |
|----------------------------|
2. | 2 1 Biology |
|----------------------------|
3. | 3 1 Psychology |
4. | 3 2 Economics |
|----------------------------|
5. | 4 1 Economics |
6. | 4 2 Psychology |
+----------------------------+