2017-07-14 31 views
1

我想从一个调查数据集中总结有用的信息。该数据集包含被调查个人父母的信息。一个ID将关联四行,其中包含有关其母亲,父亲,岳母和岳父的信息。但是,我只对被调查的人感兴趣,而不是他们的父母。如何汇总现有数据集中的有用信息并合并为一个新数据集?

* Example generated by -dataex-. To install: ssc install dataex 
clear 
input str12 ID byte(parentID ca001) 
"010104101002" 1 2 
"010104101002" 2 1 
"010104101002" 3 1 
"010104101002" 4 1 
"010104102002" 1 2 
"010104102002" 2 2 
"010104102002" 3 2 
"010104102002" 4 1 
"010104103001" 1 2 
"010104103001" 2 2 
"010104103001" 3 2 
"010104103001" 4 1 
"010104104001" 1 2 
"010104104001" 2 2 
"010104104001" 3 2 
"010104104001" 4 1 
"010104105002" 1 2 
"010104105002" 2 2 
"010104105002" 3 2 
"010104105002" 4 2 
end 
label values parentID parent 
label def parent 1 "1 Father", modify 
label def parent 2 "2 Mother", modify 
label def parent 3 "3 Father-in-law", modify 
label def parent 4 "4 Mother-in-law", modify 
label values ca001 ca001 
label def ca001 1 "1 Yes", modify 
label def ca001 2 "2 No", modify 

例如,ca001表示无论受访者的父母(母亲/父亲/母亲在法律/岳父岳母)还活着。我需要的是一个虚拟变量,表示仍然活着的ID父母的数量(0-4)。

我需要摆脱重复的ID,并为一个观察有一个唯一的ID。这是因为我需要merge此数据集与其他数据集通过匹配从一个数据集的唯一ID到另一个。

+0

使用'dataex'(在Stata中,使用'ssc inst dataex'安装)给出一个可读的数据示例。不幸的是图像没有多大用处。 –

+0

哦,thx ...我修改了我的问题,现在是否正确? –

+0

它看起来不太好... tho –

回答

1

这可能会为你工作:

bysort ID: egen alive_parents = total(-(ca001-2)) 
keep ID alive_parents 
duplicates drop 
list 

    +-------------------------+ 
    |  ID alive_parents | 
    |-------------------------| 
    1. | 010104101002   3 | 
    2. | 010104102002   1 | 
    3. | 010104103001   1 | 
    4. | 010104104001   1 | 
    5. | 010104105002   0 | 
    +-------------------------+ 

的想法是从CA001减去2,使0 ==不和-1 ==是的,然后采取消极的,这么0 ==不和1 ==是的,然后通过ID求和得到活着的父母的总数。

然后我们删除额外的变量,并留下ID-alive_parents对,每个对有4个重复项,所以我们删除重复项。

+0

非常感谢你!这正是我想要的! –

+1

请注意:'egen,sum()'在Stata 9中没有记录。由于与非''gen'函数'sum()'混淆的范围,该名称被弃用,因而会产生累积或运行总和,而不赞成使用'egen,total()'。 –

+0

我似乎对'egen,sum()'很好......只是执行了命令 –