2017-12-18 316 views
0

我有两个数据库,DB1和DB2,我想要合并,但我遇到了困难。我想要帮助确定Stata称之为我想要做的事情。在Stata中合并数据库,并根据合并数据的标识和值创建新变量

DB1具有约1000的观察,看起来像:

+----------+ 
    | date b | 
    |----------| 
1. | 1  7 | 
2. | 2  6 | 
3. | 3  7 | 
    +----------+ 

DB2由每65个标识与1000的观察。它看起来是这样的:

+--------------+ 
    | date id b | 
    |--------------| 
1. | 1  1 4 | 
2. | 2  1 4 | 
3. | 3  1 5 | 
4. | 1  2 9 | 
5. | 2  2 8 | 
6. | 3  2 7 | 
7. | 1  3 1 | 
8. | 2  3 2 | 
9. | 3  3 1 | 
    +--------------+ 

我想,这样最终的数据库看起来像DB1合并DB2:

+------------------------------+ 
    | date b id1b id2b id3b ...| 
    |------------------------------| 
1. | 1  7 4 9  1 ...| 
2. | 2  6 4 8  2 ...| 
3. | 3  7 5 7  1 ...| 
    +------------------------------+ 

我一直在阅读有关合并的命令,但单独不会造成我的最终数据库。

你能直接告诉我这些材料吗?你打电话给我想做什么?我觉得我需要命令Stata生成新的变量。

+0

真的不能肯定我明白其中的B是要去的地方。您应该为DB1和DB2中的每个b赋予不同的值,然后显示合并数据集中的位置。 – 2017-12-18 02:25:36

+0

@WilliamLisowski完成! –

+1

没有时间给出完整的答复,但我想你想从DB2'重新构造宽度'开始,然后'与数据库1合并1:1的日期'。 – 2017-12-18 02:48:22

回答

0

@William Lisowski是对的。这就得到你所要求的,简短的rename。对于您的分析而言,最好的结构是不是很清楚:大多数使用类似数据的工作会更容易进行reshape long

clear 
input date b 
1 7 
2 6 
3 7 
end 
save DB1 

clear 
input date id b 
1 1 4 
2 1 4 
3 1 5 
1 2 9 
2 2 8 
3 2 7 
1 3 1 
2 3 2 
3 3 1 
end 
reshape wide b, j(id) i(date) 
merge 1:1 date using DB1 

事实上,我更通常做这样的事情,直接获得long结构:

clear 
input date b 
1 7 
2 6 
3 7 
end 
rename b B 
save DB1 , replace 
clear 
input date id b 
1 1 4 
2 1 4 
3 1 5 
1 2 9 
2 2 8 
3 2 7 
1 3 1 
2 3 2 
3 3 1 
end 
merge m:1 date using DB1 
+1

我同意Nick对长结构的偏好;我需要更多地了解DB2中的id和b变量,以便按照请求的方式推荐它们。 – 2017-12-18 13:19:48

+0

非常感谢你们。 @nickcox我会试验你的建议方法。 B是ID(i)B观测和其他一些东西的线性组合。在使用整形之后,我生成了一个var,该值等于该行中所有ID(i)Bs的总和。 但是我并不喜欢有这么多的变量。也许你的方法更直观。 谢谢! –