2017-05-22 69 views
0

最初我正在處理一個數據集看起來是這樣的轉型的數據集:在更緊湊的格式(塔塔)

+------+--------+-----------+-------+ 
 
| date | geo | variables | value | 
 
+------+--------+-----------+-------+ 
 
| 1981 | Canada | var1  | #  | 
 
| 1982 | Canada | var1  | #  | 
 
| 1983 | Canada | var1  | #  | 
 
| ... | ... | ...  | ... | 
 
| 2015 | Canada | var2  | #  | 
 
| 1981 | Canada | var2  | #  | 
 
| 1982 | Canada | var2  | #  | 
 
| ... | ... | ...  | ... | 
 
| 2015 | Canada | var2  | #  | 
 
| 1981 | Quebec | var1  | #  | 
 
| 1982 | Quebec | var1  | #  | 
 
| 1983 | Quebec | var1  | #  | 
 
| ... | ... | ...  | ... | 
 
| 2015 | Quebec | var2  | #  | 
 
| 1981 | Quebec | var2  | #  | 
 
| 1982 | Quebec | var2  | #  | 
 
| ... | ... | ...  | ... | 
 
| 2015 | Quebec | var2  | #  | 
 
+------+--------+-----------+-------+

所以我有35個的時間段,這兩個國家和兩個變量。我想變換表在Stata爲它看起來像這樣:

+------+--------+------+------+ 
 
| date | geo | var1 | var2 | 
 
+------+--------+------+------+ 
 
| 1981 | Canada | # | # | 
 
| 1982 | Canada | # | # | 
 
| ... | ... | ... | ... | 
 
| 2015 | Canada | # | # | 
 
| 1981 | Quebec | # | # | 
 
| 1982 | Quebec | # | # | 
 
| ... | ... | ... | ... | 
 
| 2015 | Quebec | # | # | 
 
+------+--------+------+------+

不過,我並沒有與這麼多的成功。我想不同的意見與命令分成變量:

separate value, by(variables) generate(var) 

其中這樣造成了一句:

+------+--------+------+------+ 
 
| date | geo | var1 | var2 | 
 
+------+--------+------+------+ 
 
| 1981 | Canada | # | . | 
 
| 1982 | Canada | # | . | 
 
| ... | ... | ... | ... | 
 
| 2015 | Canada | # | . | 
 
| 1981 | Canada | . | # | 
 
| 1982 | Canada | . | # | 
 
| ... | ... | ... | ... | 
 
| 2015 | Canada | . | # | 
 
| 1981 | Quebec | # | . | 
 
| 1982 | Quebec | # | . | 
 
| ... | ... | ... | ... | 
 
| 2015 | Quebec | # | . | 
 
| 1981 | Quebec | . | # | 
 
| 1982 | Quebec | . | # | 
 
| ... | ... | ... | ... | 
 
| 2015 | Quebec | . | # | 
 
+------+--------+------+------+

裏面包含了很多無用的缺失值。

因此,更具體而言,我想東西帶我直接於表A到B(即不使用separate),或溶液,以表C固定到B.

感謝。

回答

3

沒有樣本數據,我的答案必須未經測試。我認爲類似下面的內容會讓你開始朝正確的方向發展。

reshape wide value, i(date geo) j(variables) string 

注意,這裏假設你的variables變量的內容是適合用作變量名。例如,變量的值爲1potato將是一個問題。

在任何情況下,

help reshape 

應該是您的第一站。

在回覆評論中添加:這裏是我編寫的一些數據和reshape適用於此數據的演示。也許你可以解釋這些數據與真實數據的區別。您的錯誤消息表明,對於日期和地理位置的某種組合,變量的特定值會多次出現。

. list, sepby(geo) 

    +----------------------------------+ 
    | date  geo variab~s value | 
    |----------------------------------| 
    1. | 1981 Canada  var1  111 | 
    2. | 1982 Canada  var1  211 | 
    3. | 1983 Canada  var1  311 | 
    4. | 1981 Canada  var2  112 | 
    5. | 1982 Canada  var2  212 | 
    6. | 1983 Canada  var2  312 | 
    |----------------------------------| 
    7. | 1981 Quebec  var1  121 | 
    8. | 1982 Quebec  var1  221 | 
    9. | 1983 Quebec  var1  321 | 
10. | 1981 Quebec  var2  122 | 
11. | 1982 Quebec  var2  222 | 
12. | 1983 Quebec  var2  322 | 
    +----------------------------------+ 

. reshape wide value, i(geo date) j(variables) string 
(note: j = var1 var2) 

Data        long -> wide 
----------------------------------------------------------------------------- 
Number of obs.      12 ->  6 
Number of variables     4 ->  4 
j variable (2 values)   variables -> (dropped) 
xij variables: 
            value -> valuevar1 valuevar2 
----------------------------------------------------------------------------- 

. rename (value*) (*) 

. list, sepby(geo) 

    +-----------------------------+ 
    | date  geo var1 var2 | 
    |-----------------------------| 
    1. | 1981 Canada 111 112 | 
    2. | 1982 Canada 211 212 | 
    3. | 1983 Canada 311 312 | 
    |-----------------------------| 
    4. | 1981 Quebec 121 122 | 
    5. | 1982 Quebec 221 222 | 
    6. | 1983 Quebec 321 322 | 
    +-----------------------------+ 

. 
+0

嗨,我很樂意提供一些示例數據,但我不知道該怎麼做。我嘗試了你的建議,它給了我下面的錯誤信息:'變量變量的值在日期地理中不唯一。而且,爲了記錄,在提出這個問題之前,我嘗試了所有可能的'reshape'命令的組合,但沒有成功。 – EBassal

+0

感謝您的幫助。你是對的,它應該工作。所以這意味着數據有問題。我可以向你發送有問題的.dta文件嗎?我看到的一個可能的問題是,不是「var1,var2,...」,「變量」中的名稱相當簡單並且包含空格。會導致問題嗎?否則,我如何檢查,如您所說的「對於日期和地理位置的某種組合,特定變量值出現多次」?再次感謝。 – EBassal

+0

這是一個不同的問題,你應該在另一個線程中詢問(可能是重複的) – timat