Stata 根据发生频率保留唯一的ID

Stata 根据发生频率保留唯一的ID,stata,Stata,数据集描述: 我有一个高度不平衡的面板数据集,一些独特的面板成员ID只出现一次,而其他面板成员ID出现多达4900次。每次观察都反映了与唯一产品标识(UPC)相关的酒精购买。如果我的小组成员在同一天、同一家商店购买了两个不同的品牌(因此,两个不同的UPC),则会产生两个不同的观察结果。然而,看到这些购买是在同一天和同一家商店进行的,我可以放心地认为这只是一次旅行。同样,假设另一位小组成员也对同一家商店进行了2次观察,但购买日期不同(反之亦然) 任务: 我想探讨那些在整个时期内购买了一定数量酒精的

数据集描述:

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

任务:

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

我首先尝试通过标注专家id、日期和店铺来识别只访问过一次的专家组成员。但是,该程序也会标记出现两次或两次以上的人的首次出现

egen tag = tag(panid day store)
我还尝试了
collapse
,但意识到这可能不是最好的解决方案,因为我想保持我的观察结果“原样”,而不聚合任何变量

如果您能就如何识别此类观察结果向我提供见解,我将不胜感激

更新:

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

我想,底线是——只要小组成员、iri_键和日期相同,这将算作一次旅行。每位专家组成员的总行程数将取决于其他不同的
专家组成员
iri_键
组合的数量

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

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。第二个人访问了两次,都是去商店一。

我不确定我是否完全理解。那么,无论购买了多少产品,是否有一次参观,一次去商店?你想看看每个人对每个商店的访问吗?添加一个示例,说明您希望数据的外观,并给出解释,会很有帮助。谢谢Roberto,这里有一个更新。我是在看到你的新答案之前写的,不客气。所以我猜还不错。请记住,答案值得代表问题所有者提供某种值得注意的反馈。例如,罗伯托,这真的很好。生成totvis的代码正是我一直在寻找的。我不得不在我的数据集中手动检查结果,而且效果很好。第二个代码也非常好。我会记住的。
     +--------------------------------------------------------+
     | 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 |
     +--------------------------------------------------------+