问题描述
我有一个包含国家、研究和数据集合的数据集。我想创建一个频率分布,以显示在每个国家/地区进行的研究总数。
我遇到的问题是我的数据是按数据集合组织的。一些研究有多个数据收集站点,并测量一个国家的不同部分(我们会说 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)