当每个ID

时间:2016-03-21 16:18:17

标签: stata

我正在处理一个数据集,该数据集在2800个人的多个日期上按日期购买(称为ItemNum)。每个项目都有自己的行,因此如果某个人在某个日期购买了两个项目,那么该日期将出现两次。我不关心在一个日期购买了多少项目(每个日期代表一次旅行),而是2800个人的平均旅行次数(大约18230行数据)。我的数据如下:

+---+----------+-------+---------------------- ---+
|ID |    Date  |ItemNum|        ItemDescript      |
| 1 |01/22/2010|   1   |Description of the item   |
| 1 |01/22/2010|   2   |Description of other item |
| 1 |07/19/2013|   1   |                          | 
| 2 |06/04/2012|   1   |                          |
| 2 |02/02/2013|   1   |                          |
| 2 |11/13/2013|   1   |                          |
+---+----------+-------+---------------------- ---+

在上表中,第1人进行了两次旅行和三次购买(因为显示了两个日期),第二次进行了三次旅行。我对所有人的平均出行次数感兴趣,但首先我需要将其折叠到独特的日期。所以我知道我需要collapse日期,但是当我做

collapse (mean) ItemNum (first) Date, by(ID)

它只显示ID显示的第一个日期,而不是每个唯一日期的第一个日期。

下一个问题是,一旦它崩溃了,我需要采用日期计数的平均值,而不是日期本身,这也是我似乎被绊倒的地方。

2 个答案:

答案 0 :(得分:1)

你试图做以下事情吗?

collapse (mean) ItemNum, by(ID Date) fast

答案 1 :(得分:1)

或许类似

clear
input ID str16 dt ItemNum
1 "01/22/2010"  1
1 "01/22/2010"  2
1 "07/19/2013"  1
end
generate Date = daily(dt,"MDY")
egen trip = tag(ID Date)
collapse (sum) trip, by(ID)
summarize trip

    Variable |        Obs        Mean    Std. Dev.       Min        Max
-------------+---------------------------------------------------------
        trip |          1           2           .          2          2

如果你正在寻找的是“平均值” - 一个数字给出了2800个人的平均旅行次数(1个人给出了有限的样本数据)。