Stata 根据发生频率保留唯一的ID
数据集描述: 我有一个高度不平衡的面板数据集,一些独特的面板成员ID只出现一次,而其他面板成员ID出现多达4900次。每次观察都反映了与唯一产品标识(UPC)相关的酒精购买。如果我的小组成员在同一天、同一家商店购买了两个不同的品牌(因此,两个不同的UPC),则会产生两个不同的观察结果。然而,看到这些购买是在同一天和同一家商店进行的,我可以放心地认为这只是一次旅行。同样,假设另一位小组成员也对同一家商店进行了2次观察,但购买日期不同(反之亦然) 任务: 我想探讨那些在整个时期内购买了一定数量酒精的人的素质。因此,我需要确定只进行了1)1次访问、2)2次访问、3)5到10次访问、4)50到100次访问的小组成员,等等 我首先尝试通过标注专家id、日期和店铺来识别只访问过一次的专家组成员。但是,该程序也会标记出现两次或两次以上的人的首次出现Stata 根据发生频率保留唯一的ID,stata,Stata,数据集描述: 我有一个高度不平衡的面板数据集,一些独特的面板成员ID只出现一次,而其他面板成员ID出现多达4900次。每次观察都反映了与唯一产品标识(UPC)相关的酒精购买。如果我的小组成员在同一天、同一家商店购买了两个不同的品牌(因此,两个不同的UPC),则会产生两个不同的观察结果。然而,看到这些购买是在同一天和同一家商店进行的,我可以放心地认为这只是一次旅行。同样,假设另一位小组成员也对同一家商店进行了2次观察,但购买日期不同(反之亦然) 任务: 我想探讨那些在整个时期内购买了一定数量酒精的
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 |
+--------------------------------------------------------+