楼主: yjw820
26621 8

[数据管理求助] 求助如何按年度把某个变量按分位数分组? [推广有奖]

  • 0关注
  • 0粉丝

小学生

78%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
39 点
帖子
4
精华
0
在线时间
14 小时
注册时间
2010-4-5
最后登录
2016-5-31

楼主
yjw820 发表于 2013-3-18 15:32:35 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
比如:
stkcd year var1
我想把每年的var1前30%编为1,最后30%编为0,中间的为缺失值。请问如何实现?
二维码

扫码加我 拉你入群

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

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

关键词:分位数 stkcd year 如何实现 VaR 如何

沙发
yjw820 发表于 2013-3-18 15:54:22
一定有人问过,直至我不知道怎样在搜索的时候表达……

藤椅
ywh19860616 发表于 2013-3-18 18:25:28
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
txje + 2 + 2 + 2 热心帮助其他会员

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

一份耕耘,一份收获。

板凳
wtv1012 发表于 2017-7-5 17:54:59
这种情况可以采用两步骤来进行,首先按年度找前30分位数和后30分位数,然后将小于30%编为1,大于70%编为0,中间的为缺失值。命令可以这样,bysort year: egen newvar30=pctile(var1), p(30)   bysort year: egen newvar70=pctile(var1), p(70)     gen var1_group=.    replace var1_group=1 if var1<newvar30    replace var1_group=0 if var1>newvar70
这种方法仅供参考,我也是多次尝试出来的,比较可靠。
已有 3 人评分学术水平 热心指数 信用等级 收起 理由
sucheng199099 + 4 精彩帖子
txje + 1 + 1 + 1 热心帮助其他会员
黃河泉 + 3 + 3 + 3 分析的有道理

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

报纸
que_chang 发表于 2018-1-9 15:36:00
wtv1012 发表于 2017-7-5 17:54
这种情况可以采用两步骤来进行,首先按年度找前30分位数和后30分位数,然后将小于30%编为1,大于70%编为0, ...
感谢提供很好的方法,但是要注意存在缺失值的情况。stata中缺失值记为“.”表示无穷大,如果newvar30中有缺失值,可能误记为var1_group=1,所以在进行以上步骤时应当先去掉缺失值。
已有 1 人评分论坛币 收起 理由
admin_kefu + 20 热心帮助其他会员

总评分: 论坛币 + 20   查看全部评分

地板
Fadedcoco 发表于 2021-1-7 16:06:13
wtv1012 发表于 2017-7-5 17:54
这种情况可以采用两步骤来进行,首先按年度找前30分位数和后30分位数,然后将小于30%编为1,大于70%编为0, ...
感谢楼主 已成功~

7
焦小焦123 发表于 2021-12-17 18:34:08
wtv1012 发表于 2017-7-5 17:54
这种情况可以采用两步骤来进行,首先按年度找前30分位数和后30分位数,然后将小于30%编为1,大于70%编为0, ...
想问一下,这里的前30%是由小到大排序吗?还是由大到小排序?

8
rayray_2023 发表于 2023-3-23 19:46:27
Fadedcoco 发表于 2021-1-7 16:06
感谢楼主 已成功~
你好,请问这个方法需不需要先把样本按照var1排序呢?还是说直接导入数据执行命令即可?

9
赵安豆 发表于 2024-6-25 22:38:05
你可以使用Python的pandas库来完成这个任务。以下是一种可能的方法:

```python
import pandas as pd

# 假设你的数据存储在一个名为df的DataFrame中
# df = pd.read_csv('your_file.csv')  # 如果需要从文件加载数据

# 计算每年var1的分位数
quantiles = df.groupby('year')['var1'].quantile([0.3, 0.7]).unstack()

# 创建一个函数来分配组别
def assign_group(x):
    if x <= quantiles.loc[x.name]['var1'][0.3]:
        return 1
    elif x >= quantiles.loc[x.name]['var1'][0.7]:
        return 0
    else:
        return pd.NA

# 应用函数到每年的每一行数据,创建新列'group'
df['group'] = df.groupby('year')['var1'].apply(assign_group)

# 确保group列是Int类型(允许缺失值)
df['group'] = df['group'].astype('Int64')
```

这段代码首先计算每年的`var1`变量的0.3和0.7分位数,然后根据这些分位数对数据进行分组。最后,它创建一个新的列'group'来存储结果。

注意:这个例子假设你的数据集已经按照年度进行了正确的排序或没有重复值。如果存在重复的数据或者需要更复杂的处理逻辑,请先预处理数据以确保正确性。

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



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

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