2017-04-12 35 views
1

我有一个数据集应该被重新整形为一个宽的格式。在多个层次上重新整形

数据目前很长,观察结果为给定学校中的每个人确定了“面积”。由于数据有两层,因此传统整形代码出现问题:首先应该重新整形,以便每个观察能够唯一地识别一个人和一个学校(具有多个区域)。其次,我们最终应该对每个人(包含多个学校和多个区域)进行一次观察。

下面是数据如何貌似现在一个例子:

* Example generated by -dataex-. To install: ssc install dataex 
clear 
input str4 id str2 school_code str1 area 
"a111" "1x" "a" 
"a111" "1x" "b" 
"a111" "1x" "c" 
"a111" "1y" "a" 
"a111" "1y" "b" 
"a111" "1y" "c" 
"x222" "1z" "d" 
"x222" "1z" "e" 
"x222" "1z" "f" 
"x222" "1k" "g" 
"x222" "1k" "h" 
"x222" "1k" "i" 
end 

这里是如何,我想数据集试探性的例子是:

* Example generated by -dataex-. To install: ssc install dataex 
clear 
input str4 id str2(school_code_1 school_code_2) str1(school1_area1 school1_area2 school1_area3 school2_area1 school2_area2 school2_area3) 
"a111" "1x" "1y" "a" "b" "c" "a" "b" "c" 
"x222" "1z" "1k" "d" "e" "f" "g" "h" "i" 
end 

回答

0

感谢您使用的数据实例dataex(SSC)。

这是一个标准的reshape一旦你注意到this FAQ中的提示,你可能需要创建一个新的标识符。

clear 
input str4 id str2 school_code str1 area 
"a111" "1x" "a" 
"a111" "1x" "b" 
"a111" "1x" "c" 
"a111" "1y" "a" 
"a111" "1y" "b" 
"a111" "1y" "c" 
"x222" "1z" "d" 
"x222" "1z" "e" 
"x222" "1z" "f" 
"x222" "1k" "g" 
"x222" "1k" "h" 
"x222" "1k" "i" 
end 

sort id, stable 
by id: gen j = _n 
reshape wide school_code area, i(id) j(j) 

list 

它产生你问。所有这一切说,很难想象这种变化的结构会使后来的Stata处理比原始数据结构更容易。另外,不同的新变量按任意变量名称分组。如果你的学校和地区的顺序不同,最后在*1 *2 *3会有所不同。 (至少)文件格式,显示格式,数据结构和数据(存储)类型,不管是正确还是错误,至于任何特定软件的正式版本术语而言。在一个Stata环境中,有一个format命令作为显示格式的一个主要意义。还有一个正式的文件格式的想法(例如http://www.stata.com/help.cgi?dta)。所以,虽然歧义很少持续很长时间,但我建议在这里讨论数据布局或结构(尽管后一个术语也是过载的)。