【问题标题】:Keep unique IDs depending on frequency of occurrence根据出现频率保留唯一 ID
【发布时间】:2014-08-10 01:58:29
【问题描述】:

数据集描述:

我有一个高度不平衡的面板数据集,其中一些唯一的面板成员 ID 只出现一次,而另一些则出现多达 4,900 次。每个观察都反映了与唯一产品标识符 (UPC) 相关的酒精购买。如果我的小组成员在同一天、同一家商店购买了两个不同的品牌(因此是两个不同的 UPC),则会产生两个不同的观察结果。然而,看到这些购买是在同一天和同一家商店进行的,我可以有把握地假设这只是一次旅行。类似地,假设另一位小组成员也有 2 次与同一商店相关但购买天数不同(反之亦然)的观察结果,他会进行 2 次商店访问。

任务:

我想探究那些在整个期间购买了一定次数的酒的人的品质。因此,我需要确定仅进行 1) 1 次访问、2) 2 次访问、3) 5 到 10 次访问、4) 50 到 100 次访问等的小组成员。

我首先尝试通过按小组成员 ID、日期和商店标记他们来识别仅进行 1 次访问的小组成员。但是,该程序还会标记那些第一次出现两次或更多的人。

egen tag = tag(panid day store)

我也尝试了collapse,但意识到这可能不是最好的解决方案,因为我想保持我的观察“原样”而不汇总任何变量。

如果您能提供有关如何识别此类观察结果的见解,我将不胜感激。

更新:

panid   units dollars iri_key   upc                 day tag
1100560 1     5.989   234140    00-01-18200-00834   47  1
1101253 1     13.99   652159    00-03-71990-09516   251 1
1100685 1     20.99   652159    00-01-18200-53030   18  1
1100685 1     15.99   652159    00-01-83783-37512   18  0


1101162 1     19.99   652159    00-01-34100-15341   206 1  
1101162 1     19.99   652159    00-01-34100-15341   235 1
1101758 1     12.99   652159    00-01-18200-43381   30  1
1101758 1     6.989   652159    00-01-18200-16992   114 1
1101758 1     11.99   652159    00-02-72311-23012   121 1
1101758 2     21.98   652159    00-02-72311-23012   128 1
1101758 1     19.99   652159    00-01-18200-96550   223 1
1101758 1     12.99   234140    00-04-87692-29103   247 1
1101758 1     20.99   234140    00-01-18200-96550   296 1
1101758 1     12.99   234140    00-01-87692-11103   296 0
1101758 1     12.99   652159    00-01-87692-11103   317 1
1101758 1     19.99   652159    00-01-18200-96550   324 1
1101758 1     12.99   652159    00-02-87692-68103   352 1
1101758 1     12.99   652159    00-01-87692-32012   354 1

您好罗伯托,感谢您的反馈。这是数据集的一个小样本。 在这个特定示例的第一部分,我们可以安全地假设所有三个 id 1100560、1101253 和 1100685 只访问了一次商店,即每个人只进行了一次交易。前两个小组成员显然每人只有一个记录,而第三个小组成员在同一天,即同一笔交易中,在同一家商店购买了 2 个不同的 UPC。

示例的第二部分有两个小组成员 - 1101162 和 1101758 - 他们进行了不止一笔交易:分别是两次和十一次。 (小组成员 1101758 有 12 次观察,但只有 11 次不同的行程。)

我想确定我的数据集的不同旅行(或交易)小组成员的确切数量:

panid   units dollars iri_key   upc                 day tag total#oftrips
1100560 1     5.989   234140    00-01-18200-00834   47  1   1
1101253 1     13.99   652159    00-03-71990-09516   251 1   1
1100685 1     20.99   652159    00-01-18200-53030   18  1   1  
1100685 1     15.99   652159    00-01-83783-37512   18  0   1


1101162 1     19.99   652159    00-01-34100-15341   206 1   2
1101162 1     19.99   652159    00-01-34100-15341   235 1   2
1101758 1     12.99   652159    00-01-18200-43381   30  1   11
1101758 1     6.989   652159    00-01-18200-16992   114 1   11
1101758 1     11.99   652159    00-02-72311-23012   121 1   11
1101758 2     21.98   652159    00-02-72311-23012   128 1   11
1101758 1     19.99   652159    00-01-18200-96550   223 1   11
1101758 1     12.99   234140    00-04-87692-29103   247 1   11
1101758 1     20.99   234140    00-01-18200-96550   296 1   11
1101758 1     12.99   234140    00-01-87692-11103   296 0   11
1101758 1     12.99   652159    00-01-87692-11103   317 1   11
1101758 1     19.99   652159    00-01-18200-96550   324 1   11
1101758 1     12.99   652159    00-02-87692-68103   352 1   11
1101758 1     12.99   652159    00-01-87692-32012   354 1   11 

我想,底线是 - 只要 panelistiri_keyday 相同,这将算作 1 次行程。每个小组成员的总行程数将取决于不同的panelistiri_keyday 组合的额外数量。

【问题讨论】:

  • 我不确定我是否完全理解。不管购买了多少产品,是否是 1 次访问,1 次去商店?你想看看每个人对每家商店的访问吗?添加您希望数据看起来如何的示例以及说明会很有帮助。
  • 谢谢罗伯托,这是更新。我是在看到你的新答案之前写的。
  • 不客气。所以我的猜测还不错。请记住,代表问题所有者的答案值得某种明显的反馈。例如,请参阅stackoverflow.com/help/someone-answers

标签: stata


【解决方案1】:

我不确定我是否完全理解你想要什么,但这是我的猜测:

clear all
set more off

*----- example data -----

input ///
id code day store
1 1 86 1
1 1 45 1
1 3 45 1
1 3 4 4
2 1 86 1
2 1 45 1
2 3 45 1
end

format day %td

list, sepby(id)

*----- what you want? -----

egen tag = tag(id day store)

bysort id: egen totvis = total(tag)
bysort id store: egen totvis2 = total(tag)

list, sepby(id)

这将导致:

     +--------------------------------------------------------+
     | id   code         day   store   tag   totvis   totvis2 |
     |--------------------------------------------------------|
  1. |  1      3   05jan1960       4     1        3         1 |
  2. |  1      1   15feb1960       1     1        3         2 |
  3. |  1      3   15feb1960       1     0        3         2 |
  4. |  1      1   27mar1960       1     1        3         2 |
     |--------------------------------------------------------|
  5. |  2      1   15feb1960       1     1        2         2 |
  6. |  2      3   15feb1960       1     0        2         2 |
  7. |  2      1   27mar1960       1     1        2         2 |
     +--------------------------------------------------------+

这意味着人 1 总共访问了 3 次(考虑到所有商店),其中,1 人访问了商店 4,2 人访问了商店 1。人 2 访问了 2 次,都访问了商店 1。

【讨论】:

  • 罗伯托,这真是太好了。生成 totvis 的代码正是我一直在寻找的。我不得不手动检查我的数据集中的结果,而且效果很好。第二个代码也很好。我会记住的。
猜你喜欢
  • 2020-04-15
  • 2020-02-29
  • 1970-01-01
  • 1970-01-01
  • 2012-11-28
  • 2011-09-04
  • 1970-01-01
  • 2013-11-25
  • 1970-01-01
相关资源
最近更新 更多