【问题标题】:How to select duplicate IDs with different values?如何选择具有不同值的重复 ID?
【发布时间】:2014-07-07 19:36:52
【问题描述】:

我正在查看 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 的计数。

【问题讨论】:

  • 在 Excel 中使用 VBA 有很多方法可以做到这一点。我将从一个循环中的一个循环开始,该循环测试是否有任何其他 ID 具有相同的数字以及它们是否具有相同的值,或者构建一个 ID 列表并使用自动过滤器并测试每个 ID 的所有值是否相同身份证。
  • 你试过什么? (我对 Stata 代码特别感兴趣,但我认为其他软件用户也想知道。)
  • @RobertoFerrer 我尝试过使用sort ID by BookingID: gen duplicate=_n,然后使用count if duplicate==1 & response==1 & response==0,其中 1 和 0 分别是 y 和 n……以及几乎所有的组合。
  • @RobertoFerrer 我想我应该确定哪个预订 ID 有两个答案,然后计算重复项,但我不知道该怎么做。
  • 最好编辑您的问题以显示代码。有经验的 Stata 用户几乎可以阅读它,但每个人都可以正确显示它会更清楚。

标签: database excel stata


【解决方案1】:

这已被记录为常见问题解答: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。

缺失值会使情况复杂化。

【讨论】:

  • 很抱歉,我认为它有效,但我使用了错误的变量作为值。当我插入正确的值时,它给了我这个错误:factor variables and time-series operators not allowed
  • 我更新了我原来的问题,使其更加清晰。我不知道为什么会出现此错误。
【解决方案2】:

扩展生成(又名egen,以及它的用户编写的附加功能伴侣egenmore)对于以下任务非常方便:

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

我不确定“仍然将 1 和 2 视为单身”是什么意思,但这应该可以帮助您入门。

【讨论】:

    猜你喜欢
    • 2022-07-18
    • 2021-01-30
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多