Stata - 显示分组频率

问题描述

我有一个包含国家、研究和数据集合的数据集。我想创建一个频率分布,以显示在每个国家/地区进行的研究总数。

我遇到的问题是我的数据是按数据集合组织的。一些研究有多个数据收集站点,并测量一个国家的不同部分(我们会说 3 个区域)。因此,一项研究可以有多行。但是,对于我需要的表格,我基本上希望它将研究组合在一起,并报告该国家是否包括在研究中的“是”或“否”(0 或 1)。从本质上讲,我不在乎在每个单独的研究中观察到一个国家的多少地方。我只想知道一个国家是否包括在一项研究中。下面的例子可能会有所帮助。

当前数据:

学习 数据收集 国家
1 1 巴西
1 2 巴西
1 3 巴西
1 4 法国
2 5 巴西
2 6 印度
3 7 巴西
4 8 法国

所需表:

国家 f(研究)
巴西 3
法国 2
印度 1

如您所见,在上面的示例中,研究 #1 观察了巴西的 3 个不同区域。在研究#2 和#3 中也观察到了这个国家。我需要创建的表格只有巴西的“3”,因为这就是巴西被纳入的研究数量

解决方法

* Example generated by -dataex-. To install: ssc install dataex
clear
input byte(study data_coll) str6 nation
1 1 "Brazil"
1 2 "Brazil"
1 3 "Brazil"
1 4 "France"
2 5 "Brazil"
2 6 "India" 
3 7 "Brazil"
4 8 "France"
end

contract study nation
drop _freq study
contract nation
list

结果:

. list

     +----------------+
     | nation   _freq |
     |----------------|
  1. | Brazil       3 |
  2. | France       2 |
  3. |  India       1 |
     +----------------+
,

请注意,如果您希望保留原始数据结构,则可以避免使用 contract

egen tag = tag(Nation)
egen wanted = total(tag),by(Study)
tabdisp Nation,c(wanted)