我想创建一个变量,其中包含参与者参加调查的天数(第一天、第二天、第三天等)。问题是有些参与者在午夜之后参加了调查。例如,它看起来像这样:
Id date
1 08/03/2020 08:17
1 08/03/2020 12:01
1 08/04/2020 15:08
1 08/04/2020 22:16
2 07/03/2020 08:10
2 07/03/2020 12:03
2 07/04/2020 15:07
2 07/05/2020 00:16
3 08/22/2020 09:17
3 08/23/2020 11:04
3 08/24/2020 00:01
4 10/03/2020 08:37
4 10/03/2020 11:13
4 10/04/2020 15:20
4 10/04/2020 23:05
这就是我想要的:
Id date day
1 08/03/2020 08:17 1
1 08/03/2020 12:01 1
1 08/04/2020 15:08 2
1 08/04/2020 22:16 2
2 07/03/2020 08:10 1
2 07/03/2020 12:03 1
2 07/04/2020 15:07 2
2 07/05/2020 00:16 2
3 08/22/2020 09:17 1
3 08/23/2020 11:04 2
3 08/24/2020 00:01 2
4 10/03/2020 08:37 1
4 10/03/2020 11:13 1
4 10/04/2020 15:20 2
4 10/04/2020 23:05 2
如何创建日期变量,考虑到午夜后参加调查的参与者仍然属于前一天?
这是一个未确认的变体 如何根据日期在 R 中创建日期数字变量?
这里没有正确的数据示例:请参阅
stata
标签 wiki。因此,您的日期变量(实际上是日期时间变量)是字符串变量还是格式化数字变量是不明确的。
对于午夜之后允许的时间没有准确的定义。除午夜外的所有时间均在午夜之后!
这里的标准是最多允许120分钟。根据您的精确标准进行更改。
这里的代码从假定的初始日期时间字符串一直到使用
mod(,)
以及 Stata 对日期时间使用毫秒分辨率的原理,但你的日期时间分辨率为分钟。
* Example generated by -dataex-. For more info, type help dataex
clear
input byte id str16 sdate
1 "08/03/2020 08:17"
1 "08/03/2020 12:01"
1 "08/04/2020 15:08"
1 "08/04/2020 22:16"
2 "07/03/2020 08:10"
2 "07/03/2020 12:03"
2 "07/04/2020 15:07"
2 "07/05/2020 00:16"
3 "08/22/2020 09:17"
3 "08/23/2020 11:04"
3 "08/24/2020 00:01"
4 "10/03/2020 08:37"
4 "10/03/2020 11:13"
4 "10/04/2020 15:20"
4 "10/04/2020 23:05"
end
gen double datetime = clock(sdate, "MDY hm")
gen ddate = dofc(datetime)
format date %tc
format ddate %td
gen min_after_mid = mod(datetime, 24 * 60 * 60000)/60000
bysort id : gen wanted = cond(min_after_mid <= 120, ddate - ddate[1], ddate - ddate[1] + 1)
list, sepby(id)
+----------------------------------------------------------------------------+
| id sdate datetime ddate min_af~d wanted |
|----------------------------------------------------------------------------|
1. | 1 08/03/2020 08:17 03aug2020 08:17:00 03aug2020 497 1 |
2. | 1 08/03/2020 12:01 03aug2020 12:01:00 03aug2020 721 1 |
3. | 1 08/04/2020 15:08 04aug2020 15:08:00 04aug2020 908 2 |
4. | 1 08/04/2020 22:16 04aug2020 22:16:00 04aug2020 1336 2 |
|----------------------------------------------------------------------------|
5. | 2 07/03/2020 08:10 03jul2020 08:10:00 03jul2020 490 1 |
6. | 2 07/03/2020 12:03 03jul2020 12:03:00 03jul2020 723 1 |
7. | 2 07/04/2020 15:07 04jul2020 15:07:00 04jul2020 907 2 |
8. | 2 07/05/2020 00:16 05jul2020 00:16:00 05jul2020 16 2 |
|----------------------------------------------------------------------------|
9. | 3 08/22/2020 09:17 22aug2020 09:17:00 22aug2020 557 1 |
10. | 3 08/23/2020 11:04 23aug2020 11:04:00 23aug2020 664 2 |
11. | 3 08/24/2020 00:01 24aug2020 00:01:00 24aug2020 1 2 |
|----------------------------------------------------------------------------|
12. | 4 10/03/2020 08:37 03oct2020 08:37:00 03oct2020 517 1 |
13. | 4 10/03/2020 11:13 03oct2020 11:13:00 03oct2020 673 1 |
14. | 4 10/04/2020 15:20 04oct2020 15:20:00 04oct2020 920 2 |
15. | 4 10/04/2020 23:05 04oct2020 23:05:00 04oct2020 1385 2 |
+----------------------------------------------------------------------------+