我试图在我的Stata数据集中为多个变量创建二元,在同一时间。
我有:
Year id Freedom
2005 1 6.8
2006 1 7.0
.
.
2016 1 5.5
2005 2 3.8
2006 2 4.2
.
.
.
2016 2 5.4
我想把它变成这个
Year id_origin id_dest Freedom_orig Freedom_dest
2005 1 2 6.8 3.8
2006 1 2 7.0 4.2
.
.
.
2016 2 1 5.4 5.5
我很难理解你需要什么。也许是因为我不熟悉什么是双性体。
我的理解是,在第一个数据集中,你有按年的观察结果。在结果数据集中,您有year-id1-id2观测值,其中id1-id2表示第一个数据集中所有可能的id对。如果这是正确的,那么您可以使用以下代码:
* Example generated by -dataex-. For more info, type help dataex
clear
input double(year id freedom)
2005 1 6.8
2006 1 7
2016 1 5.5
2005 2 3.8
2006 2 4.2
2016 2 5.4
2005 3 3.1
2006 3 3.2
2016 3 3.3
end
* Save original data to be merged as dest data
preserve
tempfile destdata
rename id id_dest
rename freedom freedom_dest
save `destdata'
restore
* rename the orig variables
rename id id_orig
rename freedom freedom_orig
* count number of ids in data set. For each year-id add one row per id in the dataset
levelsof id_orig
expand `r(r)'
* Within each year-id, gen id_dest 1, 2 ... to the number if ids
bysort id_orig year : gen id_dest = _n
* Drop rows where both ids are the same
drop if id_orig == id_dest
* Merge the data from id_dest
merge m:1 year id_dest using `destdata', nogen
* Sort and order data
sort id_orig year id_dest
order year id_orig id_dest freedom_orig freedom_dest
这段代码假设id确实是1
,2
,3
…n
,不跳过任何值。如果您的实际数据中的id是A
,B
,C
等,则必须创建此id。