全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
901 5
2024-05-02
数据结构如图:

想实现按STKCD YEAR分组,将同公司同一年的ViolationYear连接。比如选中的两行变为:
STKCD YEAR ViolationYear
000002 2016 2015;2016
即实现同公司同一年ViolationYear的汇总。ViolationYear中年份不重复出现。
求大佬解答!!!


附件列表
微信图片_20240502231605.png

原图尺寸 6.64 KB

微信图片_20240502231605.png

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2024-5-2 23:46:02
whm22 发表于 2024-5-2 23:14
数据结构如图:

想实现按STKCD YEAR分组,将同公司同一年的ViolationYear连接。比如选中的两行变为:
谢谢分享
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2024-5-3 13:47:43
要在Stata中实现你的需求,我们可以使用`egen`命令结合`group()`函数来生成唯一的组标识符,然后用`levelsof`以及`foreach`循环来遍历每个组合,最后使用`concatenate`函数来拼接不重复的文本变量。不过,需要注意的是Stata直接操作字符串的能力相对有限,因此我们可能需要一些额外步骤来确保拼接的文本变量中不包含重复的年份。

这里提供一个基于你需求的示例步骤,假设你的数据集名为`data`,并且变量名已经正确设置为`STKCD`、`YEAR`和`ViolationYear`。

1. **生成组标识符**:
首先,我们需要为每个`STKCD`和`YEAR`的组合生成一个唯一的标识符。

```stata
egen group_id = group(STKCD YEAR), label
```

2. **创建一个新的文本变量用于拼接**:
我们创建一个新的文本变量`Violations`用于存储最终的拼接结果。

```stata
gen Violations = ""
```

3. **遍历每个组合,拼接不重复的年份**:
这一步稍微复杂,因为Stata的字符串操作能力有限,我们需要一些额外的步骤来确保不重复地拼接年份。

```stata
levelsof group_id, local(groups) // 获取所有唯一的组合标识符

foreach g in `groups` {
    tempvar temp_violation
    gen `temp_violation' = ViolationYear if group_id == `g' & !missing(ViolationYear)
    duplicates drop `temp_violation' if `temp_violation' != "", force // 去除重复的年份
    egen temp_concat = concat(`temp_violation'), punct(";") // 拼接字符串,使用";"作为分隔符
    replace Violations = temp_concat[1] if group_id == `g' // 为每个组合填入拼接后的字符串
    drop `temp_violation' temp_concat
}
```

注意:上述代码中使用了`tempvar`来创建临时变量,这样做的好处是避免污染你的数据集。同时,我们使用了`duplicates drop`来去除重复的年份,确保最终拼接的字符串中不会出现重复的年份值。

4. **结果检查**:
最后,你可以检查`Violations`变量来确认拼接结果是否符合预期。

请注意,上述代码可能需要根据你的具体数据结构进行适当的调整。特别是在处理字符串和组标识符时,Stata的操作可能会有所不同,具体取决于你的数据集的结构和特点。希望这个解答能帮助到你解决问题!

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



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2024-5-3 15:54:28
赵安豆 发表于 2024-5-3 13:47
要在Stata中实现你的需求,我们可以使用`egen`命令结合`group()`函数来生成唯一的组标识符,然后用`levelso ...
小豆~请问在循环那一步报错`groups` invalid name
r(198);

是什么文图
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2024-5-10 01:13:31
问gpt怎么用python实现吧
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2024-12-25 15:10:52
whm22 发表于 2024-5-3 15:54
小豆~请问在循环那一步报错`groups` invalid name
r(198);
把foreach g in `groups‘ {
换成foreach g in `groups' {
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群