楼主: 我爱敏敏
3814 14

[编程问题求助] stata如何批量识别字段 [推广有奖]

  • 1关注
  • 14粉丝

已卖:1612份资源

博士生

85%

还不是VIP/贵宾

-

威望
0
论坛币
19978 个
通用积分
8.9604
学术水平
11 点
热心指数
9 点
信用等级
6 点
经验
3883 点
帖子
199
精华
0
在线时间
408 小时
注册时间
2013-2-1
最后登录
2025-3-9

楼主
我爱敏敏 发表于 2017-6-22 23:12:02 |AI写论文
2000论坛币
各位坛友好!

我目前正在处理一套企业数据,里面包含企业地址信息,这些地址可能包含有地级市的名字,另外我还有全国地级市的名单,我的想法是如果企业地址中包含某个地级市的名称,就生成一个city 变量并把这个变量命名为这个地级市的名字。但是由于数据量太大,手动无法完成所以想通过stata实现,我也知道strmatch 和strpos 命令吗,但是网上说的不太符合我的情况,所以请各位帮忙一下怎么实现,提前谢谢大家!
补充一下,我不想把所有地级市名称都写在程序中,有没有便捷的方法把这两个数据库link起来来简化程序?




] 1.PNG 2.PNG

最佳答案

逍遥梦蝶 查看完整内容

只是一个简单的模拟,真实数据可能存在这样或那样更多地问题,但是编程的思想是一样的。
关键词:Stata tata strpos 请各位帮忙 Match

沙发
逍遥梦蝶 发表于 2017-6-22 23:12:03
  1. * This code is written in Stata 14MP
  2. * Run all code together

  3. *--- Sample data sets ---*
  4. * Firms' name and address
  5. clear all
  6. input id str60 firmname str60 firmadd
  7. 1 洛阳中品实业有限公司         河南省洛阳市偃师市首阳山镇羊二庄
  8. 2 全南晶环科技有限责任公司     江西省赣州市全南县车站东路工业园
  9. 3 福州奋达伟业厨房设备有限公司 福建省福州市闽侯洋里铁岭工业区
  10. 4 甘肃景丽工贸有限公司         甘肃省白银市景泰县细泉镇兴泉
  11. end
  12. save firm, replace
  13. * Firms' address
  14. clear all
  15. input str15 cityname
  16. 上海市
  17. 无锡市
  18. 苏州市
  19. 杭州市
  20. 南平市
  21. 莆田市
  22. 青岛市
  23. 广州市
  24. 三亚市
  25. 洛阳市
  26. 赣州市
  27. 福州市
  28. 白银市
  29. end
  30. save cityname, replace
  31. *------------------------------*


  32. use cityname, clear
  33.     gen city = usubinstr(cityname, "市", "", .)
  34.     drop cityname
  35.     sort city   
  36.     levelsof city, local(city)  // Restore city names in a local macro named city

  37. use firm, clear
  38.     rename firm* (firm1 firm2)
  39.     reshape long firm, i(id)
  40.         * Since city names can appear either or both from name and address,
  41.         * reshape them into one column is more covenient.

  42.     gen city = ""
  43.     foreach c of local city {
  44.         replace city = "`c'" if strmatch(firm, "*`c'*")
  45.                 }
  46.                 drop if city == ""
  47.                 drop _j firm
  48.                 duplicates drop
  49.                
  50.             save firmid_city, replace
复制代码
只是一个简单的模拟,真实数据可能存在这样或那样更多地问题,但是编程的思想是一样的。
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
黃河泉 + 5 + 5 + 5 精彩帖子

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

藤椅
夏目贵志 发表于 2017-6-22 23:27:32
你这个最后多半都要手动处理一下的。不可能完全自动化的,也没啥必要。
首先把第二个图里的市字都去掉。然后用strpos什么的在第一个图的数据里对每个市生成一个dummy variable。然后把这些dummy加总。然后手动处理和不是1的那些观测值。

板凳
我爱敏敏 发表于 2017-6-22 23:39:50
夏目贵志 发表于 2017-6-22 23:27
你这个最后多半都要手动处理一下的。不可能完全自动化的,也没啥必要。
首先把第二个图里的市字都去掉。然 ...
这样啊,这样太麻烦了

报纸
夏目贵志 发表于 2017-6-23 00:07:58
我爱敏敏 发表于 2017-6-22 23:39
这样啊,这样太麻烦了
。。。比如你图里第一个企业,名字里就有两个市一个镇。你能确保他只和你第二个图里的一个名字对应上么?如果你能确保,那最后可能就不用手动处理。

地板
我爱敏敏 发表于 2017-6-23 00:11:16
夏目贵志 发表于 2017-6-23 00:07
。。。比如你图里第一个企业,名字里就有两个市一个镇。你能确保他只和你第二个图里的一个名字对应上么? ...
是的,只能与一个名字对上,因为另一个名字不是出现在地级市名单中

7
夏目贵志 发表于 2017-6-23 00:56:25
我爱敏敏 发表于 2017-6-23 00:11
是的,只能与一个名字对上,因为另一个名字不是出现在地级市名单中
好吧。如果你觉得肯定能且只能和一个对上,那就生成一个变量就好了。给你的第二个图里每个市编个号,然后strpos的时候不要生成0/1,直接把号写上就行了。

8
黃河泉 在职认证  发表于 2017-6-23 07:05:14
1. 请问共有多少个地级市名称?2. 我不想把所有地级市名称都写在程序中(什么意思?),这样怎么可能能够将两个数据库 link 起来呢?

9
我爱敏敏 发表于 2017-6-23 15:03:57
黃河泉 发表于 2017-6-23 07:05
1. 请问共有多少个地级市名称?2. 我不想把所有地级市名称都写在程序中(什么意思?),这样怎么可能能够将 ...
总共有1000多个城市。您觉得怎么写程序合适呢?

10
我爱敏敏 发表于 2017-6-23 15:18:51
夏目贵志 发表于 2017-6-23 00:56
好吧。如果你觉得肯定能且只能和一个对上,那就生成一个变量就好了。给你的第二个图里每个市编个号,然后 ...
麻烦您能教一下怎么写命令吗

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

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