需要将Excel中的时间序列转换为Stata可读的格式

时间:2014-11-16 17:44:09

标签: excel vba 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#中这是一个相当简单的操作,我需要做的就是应用几个循环并将其转换为一个二维数组,每个数据块都有一个行及其特定的时间段。但是,我不知道如何在excel / vba中执行此操作。

我知道这是一项艰巨的任务,但任何人都可以指出我如何设置它? (我可以使用2d字符串或是否有等效的......等等。)

Img链接:http://imgur.com/teXdo9x 这是我需要的更具体的例子:顶部的部分是当前数据的方式;底部的部分是我需要它成为的。

enter image description here

1 个答案:

答案 0 :(得分: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检查命令之间数据库的内容。