数据的格式是这样的。
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 这是我需要的更具体的例子:顶部的部分是当前数据的方式;底部的部分是我需要它成为的。
答案 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 stack
和help reshape
。使用list
检查命令之间数据库的内容。