2017-12-18 160 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的總和。 但是我並不喜歡有這麼多的變量。也許你的方法更直觀。 謝謝! –