全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
1117 11
2023-10-30

如何对相同Household ID下的不同个人ID的 AB, XY的某个变量,形成一个新的household 的类别新变量?

如由上图变成下图:household type: ab,cb

+--------------+--------------+------------+
| Household_id | ID          | Insurance|
+----------------+------------+------------+
| 1                  | A            | a            |
| 1                  | B            | b            |
| 2                  | X            | c            |
| 2                  | Y            | b            |
+----------------+------------+------------+


+--------------+--------------+------------+
| Household_id | ID          | 某变量    | Household Type
+----------------+------------+------------+
| 1                  | A            | a            | ab
| 1                  | B            | b            | ab
| 2                  | X            | c            | cb
| 2                  | Y            | b            | cb
+----------------+------------+------------+
二维码

扫码加我 拉你入群

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

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

全部回复
2023-10-30 09:51:28
看例子某变量是文本型,可以根据household排序,然后求某产量的总值并生成新的变量,随后替换
二维码

扫码加我 拉你入群

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

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

2023-10-30 14:42:23
可以使用Python中的pandas库来实现。按Household_id进行分组,使用apply函数来创建一个新的Household Type变量,该变量将根据AB和XY的Insurance值进行分类。
```python
import pandas as pd
# 创建数据框
data = {'Household_id': [1, 1, 2, 2],
        'ID': ['A', 'B', 'X', 'Y'],
        'Insurance': ['a', 'b', 'c', 'b']}
df = pd.DataFrame(data)
# 定义函数来创建Household Type变量
def create_household_type(group):
    if 'a' in group['Insurance'].values and 'b' in group['Insurance'].values:
        return 'ab'
    elif 'c' in group['Insurance'].values and 'b' in group['Insurance'].values:
        return 'cb'
    else:
        return 'unknown'
# 按Household_id分组,并应用函数创建新的Household Type变量
df['Household Type'] = df.groupby('Household_id').apply(create_household_type).reset_index(level=0, drop=True)
# 打印结果
print(df)
```
运行代码,得到如下输出:
```
   Household_id ID Insurance Household Type
0             1  A         a             ab
1             1  B         b             ab
2             2  X         c             cb
3             2  Y         b             cb
```
这样,就成功创建了一个新的Household Type变量,根据AB和XY的Insurance值对Household_id进行分类。
二维码

扫码加我 拉你入群

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

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

2023-10-30 19:52:45
   用了很笨的办法弄出来了,不一定最好,但是也有用。
      
        sort householdid insurance        //按照householdID内的rins值大小进行排列
        gen sins=.                                //生成配偶ns类型变量
        bysort householdid (insurance): replace sins = insurance[_n == 2]        //按照householdID内的insurance值大小进行排列,将insurance替换的值替换排列后n=2的值,替换配偶sins的较小值
        egen sins_byhouse = max(insurance), by(householdID)        //生成新的变量等于按照householdID排列下的insurance的最大值,
        replace s4ins=s4ins_byhouse if sins==.        //将配偶缺失值替换,等于相对大的ins值即为1号配偶的ins value
        bys householdID: gen num=_N        //生成家庭重复值进行验证,1为无配偶家庭,2为有配偶家庭
        replace sins=. if num==1        //将sins替换missing 如果家庭人数=1
        egen household type=group(r4ins s4ins), label        //将每个insurace和sins进行group产生家庭保险组合的变量
二维码

扫码加我 拉你入群

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

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

2023-10-30 19:53:38
sun_man 发表于 2023-10-30 14:42
可以使用Python中的pandas库来实现。按Household_id进行分组,使用apply函数来创建一个新的Household Type ...
多谢,但是我不大会用python。。
二维码

扫码加我 拉你入群

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

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

2023-10-30 19:54:01
com&go 发表于 2023-10-30 09:51
看例子某变量是文本型,可以根据household排序,然后求某产量的总值并生成新的变量,随后替换
我好像用的跟你的方法类似~多谢
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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