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

时间:2014-08-10 01:58:29

标签: stata

数据集说明:

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

任务:

我想探索那些在整个时期内购买酒精一定次数的人的品质。因此,我需要确定只进行1次访问,2次访问,3次访问5次,访问访问次数为50次,访问次数为50次等的小组成员。

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

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 个答案:

答案 0 :(得分:2)

我不确定我到底知道你想要什么,但我的猜测是:

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次。