2014-11-16 44 views
0

數據的格式是這樣的。需要將Excel中的時間序列轉換爲Stata可讀的格式

Obs1 Var1 var1ObsPeriod1 var1obsPeriod2 
Obs1 var2 var2ObsPeriod1 var2obsPeriod2 
.. 
Obs2 var96 var96obs 
... 

等等。

我需要轉換成

obs    var1    var2  var96 
obs1   var1obs   var2obs... var96obs 
obs1Period2  var1obsPer2  var2obsPer2 .... 
obs2   var1obs.... 

這是一個在C#(我知道體面的唯一語言)一個相當簡單的操作這一點;但是我無法弄清楚如何使用Excel/VBA工具。

任何人都可以幫忙嗎?在C#中,這是一個相當簡單的操作,我需要做的就是應用幾個循環,並將其轉換爲一個2d數組,每個obs及其特定時間段都有一行。但是,我不知道如何在excel/vba中執行此操作。

我知道這是一個很大的任務,但任何人都可以指出我如何設置它? (我可以用一個二維字符串或者是有一個相當於...等等。)

圖鏈接:http://imgur.com/teXdo9x 這裏是什麼,我需要更具體的例子:在上面的部分是目前的數據是如何;底部的部分是我所需要的部分。

enter image description here

+2

數據的佈局 - 既不是你所擁有的,也不是你想要的 - 在你的抽象例子中並不完全清楚。請提供更好的佈局和/或具體的例子。 –

+0

修改並糾正它。我沒有將代碼標籤正確應用於原始帖子。 – user795028

+0

對不起,它有所改進,但我仍然不明白。我認爲你仍然需要一個具體的例子。無論如何,如果目標是進口到Stata,你能確定你在Stata中不會變得更好嗎? –

回答

0

假設你有在Stata初始數據(參見help import),再一個方法是:

clear 
set more off 

*----- example data ----- 

input /// 
obs str1 vartitle period1 period2 
1   "x"   25  45 
1   "y"   67  89 
2   "x"   56  23 
2   "y"   98  34 
end 

order vartitle obs 
sort vartitle obs 

list 

*----- what you want ----- 

// stack 
stack period1 obs vartitle period2 obs vartitle, /// 
    into(metric obs2 vartitle2) clear 

isid vartitle2 obs2 _stack, sort 
rename _stack period 

// reshape 
by vartitle2: gen obs = _n 
reshape wide metric, i(obs) j(vartitle2) string 
rename metric* * 

// clean 
order obs obs2 period 
list 

可變obs可以爲每個觀測的唯一標識符被認爲。 obs2可以被認爲是一個面板標識符。

關鍵是help stackhelp reshape。使用list檢查命令之間數據庫的情況。

+0

謝謝。我已經通過Excel中的VBA發現了它(它實際上就像我想的那樣簡單的轉換),但知道你剛剛指出的內容將有助於我在後續的stata中的工作。那謝謝啦。 – user795028

相關問題