计算不同字符串的数量及其在变量中的出现次数

时间:2017-10-10 17:07:09

标签: stata

我有一个名为XmlReader的变量,用于指定观察的类别。问题是某些观察有多个类别。例如:

Category

类别顺序没有意义。它们总是以“;”分隔。有250个类别,因此创建虚拟变量可能会很棘手。如果这可能有帮助,我会在单独的Excel文件中提供完整的类别列表。

我想要的只是通过经济学(3),心理学(2),生物学(1)等独特类别来总结我的数据集(所以所有数据的总和可以优于观察数量。)

1 个答案:

答案 0 :(得分:1)

来自SSC 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 |
     +----------------------------+