全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
1766 2
2020-06-02
求问,如何对同一公司(name)在特定年份(year)找出同行业(ind_cod)中E指标最接近的四家公司,并计算这四家公司与该公司E的差值?十分感谢!


comp.dta
大小:(272.22 KB)

 马上下载




二维码

扫码加我 拉你入群

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

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

全部回复
2024-5-15 16:36:29
请问帖主,该问题有解决方法了吗?
遇到了相同问题。
二维码

扫码加我 拉你入群

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

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

2024-9-30 08:33:21
要在Stata中解决这个问题,可以使用`egen`命令中的`nearest`函数来找到对于某变量最接近的其他样本。但在此之前需要对数据进行排序和标记以便正确地找到邻近值。

以下是可能的步骤:

1. 首先确保你的数据是按照`name`, `year` 和 `ind_cod` 排序。
2. 对于每个公司每年,找出其所属行业的E指标最接近的四个样本。我们可以使用`_n` 来帮助确定邻近值的位置。

具体代码如下:

```stata
* 假设数据已经导入并包含了变量 name, year, ind_cod 和 E
sort name year ind_cod E

* 创建一个新变量来表示每个公司每年在所属行业中的E指标的顺序位置
by name year ind_cod: gen rank = _n

* 筛选出每个行业的前五名(包括自己)
keep if rank <= 5

* 使用 egen 命令和 nearest 函数找到最接近的4个样本
egen double_nearest = nearest E, to(rank) base(3)

* 计算差值
gen diff_E = abs(E - double_nearest)
```

但是请注意,`nearest`命令会返回两个最近的观测值的平均值。因此在上述代码中,我们使用了`base(3)`来找到距离第三个观测值(即除了自己之外最接近的前两个样本)最接近的样本。

为了得到具体是哪四家最接近的公司,并计算它们与目标公司的E指标差值,你可能需要稍微复杂一些的方法。一种方法是在筛选出每个行业的前五名之后,使用`preserve`和`restore`命令来保存数据集状态,在不同的循环中分别对每一家公司找到其它四家公司。

```stata
* 筛选出每个行业的前五名(包括自己)
keep if rank <= 5

preserve
foreach i of numlist _N {
    keep in `i'
    local name = r(name)
    local year = r(year)
    local ind_cod = r(ind_cod)

    * 删除当前公司,仅保留其它四个最接近的样本
    drop if (name == "`name'" & year == "`year'" & ind_cod == "`ind_cod'")

    * 计算差值并保存结果
    gen diff_E_`i' = abs(E - r(E))

    * 用完之后恢复原始数据集状态
    restore, preserve
}
```

但这样的循环可能会比较耗时,尤其是当数据量较大或者公司数量较多的时候。你也可以尝试使用一些更高级的数据处理技巧来避免循环。

如果以上代码片段仍然无法满足你的需求,请提供更多具体细节或示例数据以便我们能够提供更加详细的指导。
请根据实际情况调整上述代码中的变量名和条件。希望这能帮到您!

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



二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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