楼主: aquarius90
2520 1

[面板数据求助] 组内以及组间某一个变量两两相减的绝对值求和,跪求指导!!! [推广有奖]

  • 0关注
  • 10粉丝

已卖:2份资源

博士生

42%

还不是VIP/贵宾

-

威望
0
论坛币
535 个
通用积分
2.5206
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
360 点
帖子
33
精华
0
在线时间
527 小时
注册时间
2010-3-27
最后登录
2025-3-19

楼主
aquarius90 学生认证  发表于 2019-3-26 13:19:02 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
各路大神,下面是我数据的大概格式:第一列area是代表地区代码,grant是某个变量,想计算不同地区间以及同一地区内grant两两相减的绝对值之和。
论坛里之前有坛友提问过两两相减的问题,但是针对的是同一组样本,而且找到的代码我实现起来还是总出错,跪求各路大神能指导一二,感激不尽!!!之前找到的代码如下,如有冒犯还请见谅~
local obs = r(N)
local sum=0
forvalues i=1/`obs' {
    forvalues j=1/`obs' {
        local sum = `sum'+abs(x[`i']-x[`j'])
    }
}
PS:我的数据里,不同地区的样本量不一样,也就是不同组别具有不同的样本数量,组内以及组间都不知道该如何操作,希望大家能提供帮助,跪谢!!!

  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input float area2 long grant
  4. 1 16671
  5. 1 10625
  6. 1 12603
  7. 1 16602
  8. 1 24481
  9. 1 24468
  10. 1 34913
  11. 1 48215
  12. 1 47960
  13. 1 51508
  14. 1 48680
  15. 1 50488
  16. 1 60623
  17. 1 64230
  18. 1 64230
  19. 3  1213
  20. 3  1264
  21. 3  1381
  22. 3  1637
  23. 3  2139
  24. 3  2021
  25. 3  2923
  26. 3  3823
  27. 3  4199
  28. 3  5853
  29. 3  6804
  30. 3  8124
  31. 3 11658
  32. 3 12032
  33. 3 12032
  34. end
复制代码




二维码

扫码加我 拉你入群

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

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

关键词:不同地区 样本数量 样本数 地区的 不一样

沙发
赵安豆 发表于 2024-7-17 09:31:00
在Stata中处理这种问题,可以使用`egen`命令结合`pairwise`选项来实现。但是直接的两两绝对值之和计算并不在标准命令里,需要通过一些步骤间接完成。下面是一种可能的方法:

首先,你需要将数据按照地区分组,并且为每个地区内的样本创建一个唯一的ID(如果这个ID已经存在就不用再做这一步了)。

```stata
sort area // 首先按地区排序
by area: gen id = _n  // 对每个地区的数据生成一个序列号,表示是该区域的第几个观测值
```

然后,使用`egen`命令计算所有可能配对(包括自身和自己配对)的差绝对值之和。但是由于`egen`并不直接提供两两相减的功能,我们需要创建每一对中的第一个元素的所有组合,然后再与第二个元素进行比较。

```stata
preserve // 保存数据状态

// 生成所有id的配对(包括自身)
bysort area: gen id_pair = _n + (_N-1)*(_n==_N)
expand 2, generate(id_expanded)

sort area id_expanded // 对组合后的数据排序,确保每组内的所有元素都被考虑
by area id_expanded: replace id = cond(mod(_n,2),id,id_pair) if _n>1

// 现在每个观测值都有一个'伙伴'观测值
bysort area id id_expanded: gen grant_partner = grant[_N/2+1]

// 通过比较每个元素和它的'伙伴'计算差的绝对值
gen abs_diff = abs(grant - grant_partner)

// 然后使用egen求所有配对中abs_diff之和,但需要去掉重复(即自身与自己配对)
bysort area id: egen sum_abs_diff_within_area = total(abs_diff), by(area)
replace sum_abs_diff_within_area = . if mod(_n,2) == 1

// 现在sum_abs_diff_within_area包含了组内所有两两配对的差绝对值之和(包括自身与自己),但每个都计算了两次,所以我们需要除以2
bysort area: replace sum_abs_diff_within_area = sum_abs_diff_within_area / 2 if !missing(sum_abs_diff_within_area)

// 如果你需要考虑组间差异,可以使用类似的方法,但是这通常涉及到更复杂的数据处理,因为你可能需要在所有区域的组合上进行操作。

restore // 恢复原始数据状态
```

请注意,上述代码是基于每对元素计算差值后求和的设计思路。如果数据量非常大,这种方法可能会因为内存限制而无法执行。此外,由于Stata中直接处理所有可能配对(尤其是跨组配对)的效率较低,对于大规模的数据集或复杂需求,可能需要考虑更高级的编程语言如Python、R等来实现。

这个解决方案主要针对组内两两差绝对值之和的问题,并假设你主要关注的是组内的差异。如果还需要处理不同地区间的类似计算,请单独进行或者进一步扩展上述代码以适应跨区域配对的需求。

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



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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-5 17:44