如何折叠具有相同标识符但不同日期的数字,但保留每个标识符的首次观察日期

How to collapse numbers with same identifier but different date, but preserve the date of first observation for each identifier

我有一个可以简化为以下格式的数据集:

clear
input str9 Date ID VarA VarB
"12jan2010" 5 21 42
"12jan2010" 6 47 21
"15jan2010" 10 7 68
"17jan2010" 6 -5 -3
"19jan2010" 6 -1 -1
end

数据集中有Date、ID、VarA、VarB。每个 ID 代表一组唯一的交易。我想在 Stata 中 collapse (sum) VarA VarB, by(Date)。但是,我想保留每个 ID 号的第一次观察日期。

本质上,我希望上面的数据集变成如下:

+--------------------------------+
|    Date     ID   Var1   Var2   |
|--------------------------------|
| 12jan2010    5     21     42   |
| 12jan2010    6     41     17   |
| 15jan2010    10     7     68   |
+--------------------------------+

12jan2010 17jan2010 和 19jan2010 具有相同的 ID,所以我想 collapse (sum) Var1 Var2 这三个观察结果。我想保留日期 12jan2010 因为这是第一次观察的日期。其他两个观察结果被丢弃。

我知道可以先按 ID 折叠,然后与原始数据集和子集合并。我想知道是否有更简单的方法来完成这项工作。谢谢!

collapse 允许您计算各种统计数据,因此您可以将字符串日期转换为数字日期,然后取数字日期的最小值以获得第一次出现。

clear
input str9 Date ID VarA VarB
"12jan2010" 5 21 42
"12jan2010" 6 47 21
"15jan2010" 10 7 68
"17jan2010" 6 -5 -3
"19jan2010" 6 -1 -1
end

gen Date2 = date(Date, "DMY")
format Date2 %td
collapse (sum) VarA VarB (min) Date2 , by(ID)
order Date2, first
li

屈服

     +------------------------------+
     |     Date2   ID   VarA   VarB |
     |------------------------------|
  1. | 12jan2010    5     21     42 |
  2. | 12jan2010    6     41     17 |
  3. | 15jan2010   10      7     68 |
     +------------------------------+

回应评论:您可以仅为 VarA > 0(且不丢失)的观察结果生成格式化日期。 (假设,根据您的评论,VarAVarB 始终具有相同的符号。)

// now assume ID 6 has an earliest date of 17jan2005 (obs.4)
// but you want to return your 'first date' as the 
// first date where varA & varB are both positive
clear
input str9 Date ID VarA VarB
"12jan2010" 5 21 42
"12jan2010" 6 47 21
"15jan2010" 10 7 68
"17jan2005" 6 -5 -3
"19jan2010" 6 -1 -1
end

gen Date2 = date(Date, "DMY") if VarA > 0 & !missing(VarA)
format Date2 %td
collapse (sum) VarA VarB (min) Date2 , by(ID)
order Date2, first
li

屈服

     +------------------------------+
     |     Date2   ID   VarA   VarB |
     |------------------------------|
  1. | 12jan2010    5     21     42 |
  2. | 12jan2010    6     41     17 |
  3. | 15jan2010   10      7     68 |
     +------------------------------+