楼主: 段永飞
12084 11

[数据管理求助] 字符型变量转换成数值型求助 [推广有奖]

  • 4关注
  • 3粉丝

已卖:2份资源

副教授

8%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
1.3429
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
2464 点
帖子
131
精华
0
在线时间
1286 小时
注册时间
2009-1-15
最后登录
2025-6-12

楼主
段永飞 发表于 2015-3-30 17:23:50 |AI写论文
500论坛币

我在处理chip城镇数据时遇到的问题,家庭代码为code是字符型的,个体在家庭的编号familynumber为数值型的,我想用这两个变量合并成一个可以确认个体身份的ID。试过了如下处理方法:
1、把code变为数值型的,
采用destring code,replace force命令,得到数值型的code,随后利用公式
ge id=code*100+familynumber,结果发现id所显示的结果跟手工计算的完全不一样(大部分id居然是相同的,这可能跟科学计数表示法转换格式从而四舍五入有关)。

2、把所有变量转成字符型的加起来,
     ge a=0
    tostring a,replace
   tostring familynumber,replace
   ge id=code+a+familynumber  (添加a是为了保证code和familynumber中间有个0,因为familynumber都是小于10的)
   destring id,replace force
提取到了新的id,看起来结果不错,我就duplicates report id检查下重复值,发现有2000多个,
跟duplicates report code familynumber的结果完全不一样。

希望了解的朋友或者处理过chip城镇数据的朋友给予指导,定重谢,在线等大家的回复。

求助.dta (307.05 KB)


最佳答案

liuding1111 查看完整内容

楼主首先要处理缺漏值,list if code == "." | familynumber == . 结果显示familynumber变量含有三个缺漏值,首先删除这三个观察值,然后使用命令: egen id = group(code familynumber) 使用duplicates report id 只有有六个重复值,再使用duplicates drop id, force 删除其中三个,就ok了,包括处理缺漏值,总计删除六个观察值,其余每个id都是独立的,应该比较理想吧。
关键词:字符型变量 变量转换 数值型 字符型 duplicates replace 手工
从绝望中走向希望,人生终将辉煌

沙发
liuding1111 发表于 2015-3-30 17:23:51
楼主首先要处理缺漏值,list if code == "." | familynumber == .
结果显示familynumber变量含有三个缺漏值,首先删除这三个观察值,然后使用命令:
egen id = group(code familynumber)
使用duplicates report id
只有有六个重复值,再使用duplicates drop id, force
删除其中三个,就ok了,包括处理缺漏值,总计删除六个观察值,其余每个id都是独立的,应该比较理想吧。

藤椅
jonathanjp 发表于 2015-3-30 18:38:02
为什么不直接使用字符型的id呢?

板凳
段永飞 发表于 2015-3-30 20:56:12
liuding1111 发表于 2015-3-30 19:30
楼主首先要处理缺漏值,list if code == "." | familynumber == .
结果显示familynumber变量含有三个缺漏 ...
你好,需要先把code转成字符型吧,直接用destring 还是用encode,destring可以转化成黑色字符型,encode转化为蓝色。

报纸
SpencerMeng 在职认证  发表于 2015-3-30 21:03:49
楼主,您好!

您是想把code和familynumber凑在一起成为一个新变量是吧?

试试用egen和concat连用吧,以下是列子:
  1. clear
  2. inp str5 var1 var2
  3. ASDS  2.334
  4. SDDF  0.434
  5. WESF  43.45
  6. WSFS  3.455
  7. end
  8. egen var3=concat(var1 var2) //help egen  ;concat合并变量的命令
复制代码

地板
liuding1111 发表于 2015-3-30 21:14:02
段永飞 发表于 2015-3-30 20:56
你好,需要先把code转成字符型吧,直接用destring 还是用encode,destring可以转化成黑色字符型,encode转 ...
不能把code转化为数字,这会导致很多问题,首先,destring适用于以字符形式存储的数字变量,而你的code变量本身不是数字型变量,强制转换会导致含有字母的code值变成缺漏。encode更加行不通,这个命令主要是针对类别字符变量,比如省份、性别,使用encode后,产生的新的变量为1,2,3,4,5...,不是你需要的。如果将familynumber转化为字符,再组合,前提也需要先处理familynumber的缺漏值,最后得到的结果与不将这个变量字符化所得到的结果是一样的。

7
段永飞 发表于 2015-3-30 21:34:49
liuding1111 发表于 2015-3-30 21:14
不能把code转化为数字,这会导致很多问题,首先,destring适用于以字符形式存储的数字变量,而你的code变 ...
你好,我用这种方法操作了下,但是得到的id不是想要的那个id,我想要的id是通过code和familynumber组合起来的,所以还得麻烦您解释下,这些论坛币先给你,问题解决后定重谢。

8
liuding1111 发表于 2015-3-30 22:44:34
段永飞 发表于 2015-3-30 21:34
你好,我用这种方法操作了下,但是得到的id不是想要的那个id,我想要的id是通过code和familynumber组合起 ...
谢谢楼主的论坛币,楼主想得到数字化的code与familynumber组合是行不通的,有两点原因,一是Stata支持的数字存储最大值为21亿左右,也就是10位数的数值,但是楼主的code加零加familynumber有19位,远远超过了双精度格式下的最大值;二是变量code的观察值中含有字母,这使得其不能数字化,所有我认为楼主的这一点基本上是做不到的。

9
liuding1111 发表于 2015-3-30 22:44:35
段永飞 发表于 2015-3-30 21:34
你好,我用这种方法操作了下,但是得到的id不是想要的那个id,我想要的id是通过code和familynumber组合起 ...
谢谢楼主的论坛币,楼主想得到数字化的code与familynumber组合是行不通的,有两点原因,一是Stata支持的数字存储最大值为21亿左右,也就是10位数的数值,但是楼主的code加零加familynumber有19位,远远超过了双精度格式下的最大值;二是变量code的观察值中含有字母,这使得其不能数字化,所有我认为楼主的这一点基本上是做不到的。

10
段永飞 发表于 2015-3-30 22:55:32
liuding1111 发表于 2015-3-30 22:44
谢谢楼主的论坛币,楼主想得到数字化的code与familynumber组合是行不通的,有两点原因,一是Stata支持的数 ...
嗯,好的,谢谢啊,我直接用字符型的合并,看看结果怎么样。

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

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