楼主: zlqs1985
11071 8

[数据管理求助] 怎样对中文字符使用正则表达式 (--regex--) [推广有奖]

  • 2关注
  • 17粉丝

副教授

2%

还不是VIP/贵宾

-

威望
0
论坛币
1020 个
通用积分
12.0301
学术水平
2 点
热心指数
6 点
信用等级
2 点
经验
8733 点
帖子
324
精华
0
在线时间
815 小时
注册时间
2008-9-18
最后登录
2023-1-16

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
最近写论文需要整理统计局发布的行政区域代码 regional_code.xls (278 KB) ,因为从网页上copy 下来就是代码和地名混在一列,所以需要把代码和地名分开。导入stata后,整理数据,由于代码都是六位,所以用--substr-- 命令很容易就整理好了,但是当需要整理地名的时候,因为地名长度不一致,所以想到用stata内置的正则表达式 --regex-- --regexm--, 但是我发现,当我使用类似于 ([a-zA-Z]+)$ 这样的正则表达式的时候,返回的都是空值,gen county = regexs(0) if regexm(region, "([a-zA-Z]+)$"),我反反复复尝试了各种组合都是这个结果,这让我非常困惑,是否stata里面的正则表达式不适用于中文字符? 行政区代码和地名


二维码

扫码加我 拉你入群

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

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

关键词:正则表达式 表达式 REG SUBSTR Region 破伤风 表达式 中文 论文

本帖被以下文库推荐

沙发
夏目贵志 发表于 2015-8-7 22:57:09 |只看作者 |坛友微信交流群
http://www.regular-expressions.info/unicode.html
我不知道stata具体算是什么flavor

使用道具

藤椅
蓝色 发表于 2015-8-8 17:19:16 |只看作者 |坛友微信交流群
1、你的excel数据的最后两个样本不是区域的代码和名称

2、
*截取代码
gen code    =substr(rawcode, 1,6)

*把rawcode中的code替换为空的
gen rawcode1=subinstr(rawcode, code,"",.)

*读取rawcode1数据中非数字和汉字的字符,生成变量x
gen x =regexs(0) if regexm(rawcode1,"([?]+)")

*把rawcode1数据中非数字和汉字的字符替换为空的
gen name=subinstr(rawcode1, x,"",.)

*保留代码和区域名称
keep code name
已有 3 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
改革同步 + 5 精彩帖子
Sunknownay + 2 + 2 + 2 精彩帖子
夏目贵志 + 60 + 5 + 5 + 5 精彩帖子

总评分: 论坛币 + 60  学术水平 + 12  热心指数 + 7  信用等级 + 7   查看全部评分

使用道具

板凳
caesarljs 在职认证  学生认证  发表于 2017-10-13 15:01:19 |只看作者 |坛友微信交流群
蓝色 发表于 2015-8-8 17:19
1、你的excel数据的最后两个样本不是区域的代码和名称

2、
请问大神,gen x =regexs(0) if regexm(rawcode1,"([?]+)") 这句命令好像生成的是空值,不是空格之类的,有别的办法找到非数字和汉字的字符吗? 谢谢

使用道具

报纸
蓝色 发表于 2017-10-14 16:58:50 |只看作者 |坛友微信交流群
caesarljs 发表于 2017-10-13 15:01
请问大神,gen x =regexs(0) if regexm(rawcode1,"([?]+)") 这句命令好像生成的是空值,不是空格之类的, ...
我这里执行没有问题
  1. . import excel "D:\regional_code.xls",     sheet("Sheet1") firstrow

  2. .
  3. . *截取代码
  4. . gen code    =substr(rawcode, 1,6)

  5. .
  6. . *把rawcode中的code替换为空的
  7. . gen rawcode1=subinstr(rawcode, code,"",.)

  8. .
  9. . *读取rawcode1数据中非数字和汉字的字符,生成变量x
  10. . gen x =regexs(0) if regexm(rawcode1,"([?]+)")

  11. .
  12. . *把rawcode1数据中非数字和汉字的字符替换为空的
  13. . gen name=subinstr(rawcode1, x,"",.)

  14. .
  15. . *保留代码和区域名称
  16. . keep code name

  17. . list in 1/10

  18.      +--------------------------+
  19.      |   code              name |
  20.      |--------------------------|
  21.   1. | 110000           北京市 |
  22.   2. | 110100          市辖区 |
  23.   3. | 110101         东城区 |
  24.   4. | 110102         西城区 |
  25.   5. | 110105         朝阳区 |
  26.      |--------------------------|
  27.   6. | 110106         丰台区 |
  28.   7. | 110107       石景山区 |
  29.   8. | 110108         海淀区 |
  30.   9. | 110109       门头沟区 |
  31. 10. | 110111         房山区 |
  32.      +--------------------------+
复制代码


使用道具

地板
caesarljs 在职认证  学生认证  发表于 2017-10-19 13:50:12 |只看作者 |坛友微信交流群
蓝色 发表于 2017-10-14 16:58
我这里执行没有问题
感谢大神的解答,是不是版本的问题,我用的是14.2。一会我在尝试一下试试  

使用道具

7
caesarljs 在职认证  学生认证  发表于 2017-10-19 14:44:19 |只看作者 |坛友微信交流群
蓝色 发表于 2017-10-14 16:58
我这里执行没有问题
另外,请教一下大神,有较好的stata正则表达式相关的学习资料吗? 希望大神能推荐一下,感谢感谢

使用道具

8
LWFISS 发表于 2021-7-3 13:30:55 |只看作者 |坛友微信交流群
excel的快捷键ctrl+E很快填充,可以百度一下这个快捷键的用法

使用道具

9
baiguanchi1 发表于 2021-12-8 15:23:22 |只看作者 |坛友微信交流群
LWFISS 发表于 2021-7-3 13:30
excel的快捷键ctrl+E很快填充,可以百度一下这个快捷键的用法
几百万的样本

使用道具

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

本版微信群
加好友,备注jltj
拉您入交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-3 09:36