楼主: loxi1982
5520 9

[数据管理求助] stata 如何查找变量中是否包含另外一列的变量 [推广有奖]

  • 0关注
  • 1粉丝

讲师

45%

还不是VIP/贵宾

-

威望
0
论坛币
3291 个
通用积分
4.8602
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
2933 点
帖子
186
精华
0
在线时间
844 小时
注册时间
2004-10-12
最后登录
2024-6-13

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
各位大牛,请教个问题。现有两列字符型变量:
    name                                                      var1                       newvar
平安银行股份有限公司                           平安银行                      1

万科企业股份有限公司                            浦发银行                     0
深圳中国农大科技股份有限公司              万科                            1
神州长城股份有限公司                           赣锋锂业                      0
秦皇岛秦冶重工有限公司                       天业通联                      0

现在想找出name变量中包含var1变量字符串,重新产生新的变量newvar。即var1变量中的字符串只要出现在name这一变量中,即为1,否则为0.
尝试过strmatch, 但strmatch好像只能查找特定的字符,而不是示例中var1变量的一系列字符串,strpos,regexm好像都只能查找某一个特定的字符串,而不是字符串变量。由于var1有3000多个观察值,用简单的罗列法似乎不太现实。

故请教各位大家,能否帮忙解决这一问题,谢谢。


二维码

扫码加我 拉你入群

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

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

关键词:Stata tata 如何查找 股份有限公司 strpos 如何

在沉浮中寻觅, 在沉沦中惊醒, 在阳光下奔跑。
沙发
夏目贵志 发表于 2016-5-27 23:50:10 |只看作者 |坛友微信交流群
  1. local N=_N
  2. gen newvar = .
  3. forvalues n=1/`N' {
  4.         local ptn = var1[`n']
  5.         local tgt = name[`n']
  6.         replace newvar = strmatch("`tgt'","*`ptn'*") in `n'
  7. }
复制代码
已有 1 人评分经验 收起 理由
Captain-CUI + 60 精彩帖子

总评分: 经验 + 60   查看全部评分

使用道具

藤椅
znxkxx 发表于 2016-5-29 14:05:39 |只看作者 |坛友微信交流群
楼上方法很好,也来贡献一个strpos()的解决办法:
  1. gen newvar = strpos(name, var1)!=0
复制代码
已有 1 人评分论坛币 收起 理由
夏目贵志 + 10 观点有启发

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

使用道具

板凳
夏目贵志 发表于 2016-5-30 21:10:07 |只看作者 |坛友微信交流群
znxkxx 发表于 2016-5-29 14:05
楼上方法很好,也来贡献一个strpos()的解决办法:
晕。。。我相信了楼主说的
strpos,regexm好像都只能查找某一个特定的字符串,而不是字符串变量。
才写的循环。。。

你这个是正解。。。

使用道具

报纸
海阔天空锦鲤 学生认证  发表于 2021-4-7 20:26:16 |只看作者 |坛友微信交流群
znxkxx 发表于 2016-5-29 14:05
楼上方法很好,也来贡献一个strpos()的解决办法:
请问我运行了这个,第a列第1行的变量并没有在b列完成全部搜索,然后在第c列第1行生成1(找到)或0(没找到)的结果,可以帮忙看下吗,谢谢

使用道具

地板
abcsk 发表于 2021-7-6 21:35:59 |只看作者 |坛友微信交流群
gen id=0
forvalues i = 1/5{
   replace id= id+regexm(name, var1[`i'])
}

使用道具

7
海阔天空锦鲤 学生认证  发表于 2021-7-14 09:59:07 |只看作者 |坛友微信交流群
夏目贵志 发表于 2016-5-27 23:50
请问这个好像实现不了,楼主的var1(万科)所在的行,使用这个命令,得到newvar不为1

使用道具

8
eton2333 发表于 2021-12-30 13:44:39 |只看作者 |坛友微信交流群
znxkxx 发表于 2016-5-29 14:05
楼上方法很好,也来贡献一个strpos()的解决办法:
他这是替换一个确定的值,如果很多个不一样的呢?怎么查找筛选呢?

使用道具

9
小荷荷子 学生认证  发表于 2022-11-9 17:02:46 |只看作者 |坛友微信交流群
请问楼主解决了吗,我试了回答中的方法,都不行

使用道具

10
秋深了夜明了 学生认证  发表于 2023-8-24 17:45:52 |只看作者 |坛友微信交流群
小荷荷子 发表于 2022-11-9 17:02
请问楼主解决了吗,我试了回答中的方法,都不行
https://www.bilibili.com/read/cv11264648/B站上有个帖子说了类似问题的方法,用gen newvar= regexm(name,var1)

使用道具

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

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

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

GMT+8, 2024-6-17 11:04