上一篇我们解决了如何计算字符变量中特定字符的数量,但有时候写循环,还需要知道字符变量中唯一的单词(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