楼主: wengyouzai
7898 6

[数据管理求助] 请问怎么在stata中将某一变量按大小排序后选择前20%和后20%的样本? [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

高中生

20%

还不是VIP/贵宾

-

威望
0
论坛币
93 个
通用积分
0.1323
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
207 点
帖子
13
精华
0
在线时间
28 小时
注册时间
2019-12-10
最后登录
2023-4-10

楼主
wengyouzai 发表于 2022-3-28 09:20:25 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
想将我的样本按照变量X 从大到小排序,选择X 前20%的为一组,X 后20%的 为一组,请问应该如何操作呀
二维码

扫码加我 拉你入群

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

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

关键词:Stata tata 如何操作

沙发
黃河泉 在职认证  发表于 2022-3-28 11:25:49
请据以更改
  1. webuse grunfeld, clear
  2. egen p20 = pctile(invest), p(20)
  3. egen p80 = pctile(invest), p(80)
复制代码

藤椅
wengyouzai 发表于 2022-3-28 15:36:13
黃河泉 发表于 2022-3-28 11:25
请据以更改
谢谢黄老师!

板凳
wo哩好好 发表于 2022-11-15 20:45:56
黃河泉 发表于 2022-3-28 11:25
请据以更改
这个会把所有数据改成20%或者80%

报纸
黃河泉 在职认证  发表于 2022-11-16 08:54:28
wo哩好好 发表于 2022-11-15 20:45
这个会把所有数据改成20%或者80%
上面是将 20% 与 80% 的"分界点"求出,自己可以根据其做进一步分组!

地板
wo哩好好 发表于 2022-11-19 21:19:02
黃河泉 发表于 2022-11-16 08:54
上面是将 20% 与 80% 的"分界点"求出,自己可以根据其做进一步分组!
对的,根据老师的步骤算出来啦,谢谢老师指导(插个与这个问题无关的,请问老师企业的资源配置效率怎么计算或者要素错配)

7
赵安豆 发表于 2024-7-31 08:40:16
在Stata中实现这一需求可以通过以下步骤进行:

1. **按变量X排序**:首先使用`sort`命令对数据按照变量X进行降序或升序排列。

   ```
   sort X, descending // 降序排列,适用于想要找到最大的前20%的值。
   ```

2. **计算样本数量和20%点位**:确定总样本数,并找出表示20%位置的观测值编号。

   ```
   qui count
   local obs = r(N)
   local cut = floor(`obs' * .2)
   ```

3. **创建分组变量**:基于排序后的数据,使用`egen`命令来创建一个新变量用来标识前20%和后20%的样本。

   ```
   bysort X (X) : gen percentile = _n
   replace percentile = (`obs' - percentile + 1) if X < .
   egen group = cutof(., percentile), at(`cut')
   replace group = . if percentile <= `cut' | percentile > `obs' - `cut'
   label define group_label 0 "Not Selected" 1 "Top 20%" 2 "Bottom 20%"
   label values group group_label
   ```

但是,上述步骤中,我们可能需要对`group`变量的生成逻辑进行微调以适应具体需求。一个更为直接的方法是使用`egen`命令结合`xtile`函数来创建基于百分位数的分组:

```
// 计算总样本数量
qui count
local obs = r(N)

// 使用xtile计算分位点,这里假设将数据分为5等份(前20%,中间60%,后20%)
xtile percentile = X, nq(5)
replace percentile = . if missing(X)

// 标签定义,便于理解
label define percentile_label 1 "Bottom 20%" 2 "Bottom 40-60%" 3 "Middle" 4 "Top 40-60%" 5 "Top 20%"
label values percentile percentile_label

// 如果只需要前20%和后20%,可以进一步处理
gen group = .
replace group = 1 if percentile == 1 // 前20%
replace group = 2 if percentile == 5 // 后20%

label define group_label 1 "Bottom 20%" 2 "Top 20%"
label values group group_label

// 如果需要,可以使用tabulate查看结果
tabulate group, missing
```

这个方法更加简洁,直接利用`xtile`命令计算了X变量的五等分位数,并将样本分为前20%、后20%,中间60%则被忽略或可进一步处理。最后生成了一个新变量`group`来标识是否属于前20%或后20%的组别,方便后续分析使用。

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



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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-30 17:30