我正在查看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的数量。
答案 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视为单身人士"意思是,但这应该让你开始。