如何折叠具有相同标识符但不同日期的数字,但保留每个标识符的首次观察日期
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(且不丢失)的观察结果生成格式化日期。 (假设,根据您的评论,VarA
和 VarB
始终具有相同的符号。)
// 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 |
+------------------------------+
我有一个可以简化为以下格式的数据集:
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(且不丢失)的观察结果生成格式化日期。 (假设,根据您的评论,VarA
和 VarB
始终具有相同的符号。)
// 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 |
+------------------------------+