如何选择具有不同值的重复ID?

时间:2014-07-07 19:36:52

标签: database excel stata

我正在查看Stata中的数据集,该数据集具有许多重复的ID值(每个值代表一个人),但ID的每个实例可以具有两个值中的一个。例如,

PersonID | Place
------------------------
1        | New York
1        | New York
1        | Berlin
2        | Chicago
2        | Chicago
3        | Berlin
3        | Chicago

我想选择 ID 1和2,因为它们具有混合值且忽略 ID 3,但仍将1和2视为单个人。

我很欣赏有关如何在Stata或Excel中执行此操作的提示。我无法访问SQL。

修改

我更改了原始的伪图表以更好地反映我的数据。

以下是我已尝试过的代码:

sort PersonID Place
by PersonID(Place), sort: gen mix=Place[1] != Place[_n]
count PersonID Place if mix

这不起作用。它在第2行后给了我以下错误:

factor variables and time-series operators not allowed

更清楚的是,我想要的是具有混合位置值的PersonID的数量。

2 个答案:

答案 0 :(得分:2)

这已经记录为常见问题解答:http://www.stata.com/support/faqs/data-management/listing-observations-in-group/

bysort id (value) : gen wanted = value[1] == "n" & value[_N] == "y" 

value作为字符串变量的解决方案。从你说的话

bysort id (value) : gen wanted = value[1] != value[_N] 

是一种更通用的解决方案。在这两个示例中,变量wanted对于有用ID将为1,否则为0。

缺少值会使这一点复杂化。

答案 1 :(得分:1)

扩展生成(又名egen及其用户编写的附加函数egenmore)对于以下任务非常方便:

ssc install egenmore    
bys PersonID: egen nvals=nvals(Place)
edit if nvals >1

我不确定"仍然将1和2视为单身人士"意思是,但这应该让你开始。