Stata如何计算字符变量中不重复的单词数量?

上一篇我们解决了如何计算字符变量中特定字符的数量,但有时候写循环,还需要知道字符变量中唯一的单词(unique and distinct words)数量。

读取实例数据,Stata代码如下:

* Example generated by -dataex-. For more info, type help dataex
clear
input group str25 soft total
            1    "Stata" 1
            1    "SPSS" 1
            2    "Python R Julia" 3
            1    "Stata SPSS SAS" 3
            3    "Stata Julia" 2
            1    "SAS" 1
            2    "R R R" 1
            1    "SPSS Stata" 2
			2    "Python Julia" 2
			3    "Stata Python" 2
			3    "SPSS Python" 2
			end

如果只想知道每个变量包含的单词(字符串)数量,可以使用wordcount()函数,我们将其赋值为sum1,Stata命令如下:


gen id=_n
order id,before(group)
gen num1=wordcount(soft)
sort group
list, sepby(group)

可以看出,id为7的记录中,计算出来的单词数量为3,如果我们想使其为1,即计算唯一的不重复的单词数量(total列所示),可以考虑以下几种方法。

第一种方法是将字符变量去重,再使用wordcount()函数计算,Stata命令如下:


clonevar softc=soft
forvalues n = 1/`=_N' {
                local Lian1 `"`=softc[`n']'"'
                local Lian2 : list uniq Lian1
                replace softc = `"`: list uniq Lian1'"' in `n'
                }
order softc,after(soft)
gen num2=wordcount(softc)
drop softc
list, sepby(group)

调用总列数我们用了`=_N’,若用局部宏会好理解一些,更换这行的Stata代码如下:


local row_Lian = _N
forvalues n = 1/`row_Lian' {

可以看出,新的字符变量softc重复变量去掉了,num2的值是唯一的单词数量(total列)。

第二种方法是使用Stata社区命令egenmore,Stata命令如下:


split soft,generate (Lian)
*安装Stata社区命令egenmore
ssc install egenmore,replace
egen num3=rowsvals(Lian*)
drop Lian*
list, sepby(group)

可以看出,num3的值是唯一的单词数量(total列)。

完,本文内容交流请移步:http://www.epiman.cn/thread-152451-1-1.html