stata - 如果满足特定条件,则按 id 复制数据条目
问题描述
在原始选择数据集中,个人(id
)被捕获choice
在所有可能的产品选项(assortchoice
是产品代码)中进行购买( )。每个人总是面临着同一套产品可供选择;因此, 的值choice
始终为 0 或 1(“是否选择了产品?”)。
clear
input
id assortchoice choice sumchoice
2 12 1 2
2 13 0 2
2 14 0 2
2 15 0 2
2 16 0 2
2 17 0 2
2 18 0 2
2 19 0 2
2 20 0 2
2 21 0 2
2 22 0 2
2 23 1 2
3 12 1 1
3 13 0 1
3 14 0 1
3 15 0 1
3 16 0 1
3 17 0 1
3 18 0 1
3 19 0 1
3 20 0 1
3 21 0 1
3 22 0 1
3 23 0 1
4 12 1 3
4 13 0 3
4 14 1 3
4 15 1 3
4 16 0 3
4 17 0 3
4 18 0 3
4 19 0 3
4 20 0 3
4 21 0 3
4 22 0 3
4 23 0 3
end
我创建了以下代码来了解每个人做了多少选择:
egen sumchoice=total(choice), by(id)
在这个例子中,个人 3 (id=3) 只选择了一种产品(因为 sumchoice=1),但个人 2 做了两种选择(sumchoice=2)。最后,个人 4 做了三个选择(sumchoice=3)。
由于这是一个选择数据,我需要将多项选择的所有实例转换为单项选择集。
我的意思是:如果一个人做了两次购买,我需要为那个人复制两次选择集;对于一个购买了 3 次的个人,我需要将选择集复制 3 次,所以最终的结构看起来像下面的数据集。
clear
input
id transaction assortchoice choice
2 1 12 1
2 1 13 0
2 1 14 0
2 1 15 0
2 1 16 0
2 1 17 0
2 1 18 0
2 1 19 0
2 1 20 0
2 1 21 0
2 1 22 0
2 1 23 0
2 2 12 0
2 2 13 0
2 2 14 0
2 2 15 0
2 2 16 0
2 2 17 0
2 2 18 0
2 2 19 0
2 2 20 0
2 2 21 0
2 2 22 0
2 2 23 1
3 1 12 1
3 1 13 0
3 1 14 0
3 1 15 0
3 1 16 0
3 1 17 0
3 1 18 0
3 1 19 0
3 1 20 0
3 1 21 0
3 1 22 0
3 1 23 0
4 1 12 1
4 1 13 0
4 1 14 0
4 1 15 0
4 1 16 0
4 1 17 0
4 1 18 0
4 1 19 0
4 1 20 0
4 1 21 0
4 1 22 0
4 1 23 0
4 2 12 0
4 2 13 0
4 2 14 1
4 2 15 0
4 2 16 0
4 2 17 0
4 2 18 0
4 2 19 0
4 2 20 0
4 2 21 0
4 2 22 0
4 2 23 0
4 3 12 0
4 3 13 0
4 3 14 0
4 3 15 1
4 3 16 0
4 3 17 0
4 3 18 0
4 3 19 0
4 3 20 0
4 3 21 0
4 3 22 0
4 3 23 0
end
***更新:
transaction
指示这是哪个交易订单:
bysort id assortchoice (choice): gen transaction=_n
因此,choice=1 应该在每个事务中只出现一次。
解决方案
答案并不完全是“使用expand
”,因为您不想要精确复制。
expand sumchoice
bysort id assortchoice (choice) : replace choice = 0 if _n != _N & choice == 1
list if id == 2 , sepby(assortchoice)
+-----------------------------------+
| id assort~e choice sumcho~e |
|-----------------------------------|
1. | 2 12 0 2 |
2. | 2 12 1 2 |
|-----------------------------------|
3. | 2 13 0 2 |
4. | 2 13 0 2 |
|-----------------------------------|
5. | 2 14 0 2 |
6. | 2 14 0 2 |
|-----------------------------------|
7. | 2 15 0 2 |
8. | 2 15 0 2 |
|-----------------------------------|
9. | 2 16 0 2 |
10. | 2 16 0 2 |
|-----------------------------------|
11. | 2 17 0 2 |
12. | 2 17 0 2 |
|-----------------------------------|
13. | 2 18 0 2 |
14. | 2 18 0 2 |
|-----------------------------------|
15. | 2 19 0 2 |
16. | 2 19 0 2 |
|-----------------------------------|
17. | 2 20 0 2 |
18. | 2 20 0 2 |
|-----------------------------------|
19. | 2 21 0 2 |
20. | 2 21 0 2 |
|-----------------------------------|
21. | 2 22 0 2 |
22. | 2 22 0 2 |
|-----------------------------------|
23. | 2 23 0 2 |
24. | 2 23 1 2 |
+-----------------------------------+
推荐阅读
- flutter - 如何在flutter_enhanced_editor中上传图片onImageUpload回调
- node.js - 我需要在bulmq 中实现启动和停止工作队列功能
- python-3.x - 导入尴尬的数组包的问题:导入_ext时DLL加载失败
- angular - 避免 @ngrx/effects 取消相同的操作
- php - 无法使用 PHP 脚本连接到 SQL Server
- java - NoSuchFileException 仅在位于目标文件夹中的运行 jar 上
- python - 安装库时 Docker 映像构建失败:无法建立新连接:[Errno -5] 没有与主机名关联的地址
- python - 如何在 Python 中使用 for 循环将多个项目添加到 SQL 表中?
- dart - 实例化嵌套对象 (Dart)
- python - Flask websocket有延迟