楼主: diannaoasd
1949 5

[编程问题求助] 想做面板数据DID,识别treat前,一个小问题的stata代码求助 [推广有奖]

  • 8关注
  • 7粉丝

已卖:1336份资源

讲师

32%

还不是VIP/贵宾

-

威望
0
论坛币
79957 个
通用积分
175.2226
学术水平
9 点
热心指数
5 点
信用等级
5 点
经验
5816 点
帖子
180
精华
0
在线时间
623 小时
注册时间
2010-12-6
最后登录
2026-2-2

楼主
diannaoasd 发表于 2019-11-10 22:34:27 |AI写论文
30论坛币
如图:只要这个name(第1列)下的任意一个try(第2列)为“1”,则这个name下的所有treat(第3列)为“1”
该如何写stata代码呢?


  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input str1 name int(try treat)
  4. "A" 0 1
  5. "A" 0 1
  6. "A" 1 1
  7. "A" 1 1
  8. "B" 0 1
  9. "B" 0 1
  10. "B" 0 1
  11. "B" 1 1
  12. "C" 0 0
  13. "C" 0 0
  14. "C" 0 0
  15. "C" 0 0
  16. end
复制代码



treat.png (9.21 KB)

treat.png

最佳答案

317792209 查看完整内容

代码很简单,如下:

沙发
317792209 在职认证  学生认证  发表于 2019-11-10 22:34:28
代码很简单,如下:
  1. . drop treat
  2. . bys name:egen sum=total(try)
  3. . gen treat=(sum!=0)
  4. . drop sum
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
diannaoasd + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

藤椅
黃河泉 在职认证  发表于 2019-11-11 10:04:16
也可试试
  1. bys name: egen wanted = max(try)
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
diannaoasd + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

板凳
diannaoasd 发表于 2019-11-11 10:22:34
黃河泉 发表于 2019-11-11 10:04
也可试试
谢谢您,可惜最佳答案只有一个,317792209 时间略早,非常感谢您~

报纸
黃河泉 在职认证  发表于 2019-11-11 10:57:25
diannaoasd 发表于 2019-11-11 10:22
谢谢您,可惜最佳答案只有一个,317792209 时间略早,非常感谢您~
It's OK!

地板
赵安豆 发表于 2024-10-30 19:26:11
在Stata中,你可以使用`egen`命令的`max()`函数来实现这一需求。首先确保你的数据按照`name`进行排序,然后利用`egen`找出每个`name`下的最大`try`值,并基于这个结果更新`treat`变量。

以下是具体的Stata代码示例:

```stata
* Example generated by -dataex-. To install: ssc install dataex
clear
input str1 name int(try treat)
"A" 0 1
"A" 0 1
"A" 1 1
"A" 1 1
"B" 0 1
"B" 0 1
"B" 0 1
"B" 1 1
"C" 0 0
"C" 0 0
"C" 0 0
"C" 0 0
end

* 首先按照name排序数据
sort name

* 使用egen命令生成每个name下的try的最大值,保存为变量max_try
by name: egen max_try = max(try)

* 判断max_try是否为1,如果是,则将treat更新为1;否则保持原样(或者也可以设置为0)
replace treat = (max_try == 1)

* 清理不再需要的中间变量max_try
drop max_try

* 查看结果
list, sepby(name)
```

这段代码的关键在于使用了`egen`命令来计算每个`name`下`try`的最大值,然后根据这个最大值是否为1来更新`treat`。最后,我们删除了`max_try`变量以保持数据集的整洁。

请注意,如果初始数据中的`treat`列有其他含义需要保留,那么在执行这段代码之前应该先保存`treat`的原始信息或者创建一个备份变量。

此文本由CAIE学术大模型生成,添加下方二维码,优先体验功能试用



您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-2-7 19:18