楼主: 饺子大神
5589 21

[数据管理求助] stata里面一列被包含于另一列怎么说 [推广有奖]

11
xingxf 发表于 2013-9-21 00:49:48
饺子大神 发表于 2013-9-20 23:30
不是,name2里面的名字可能是乱序排列的。也就是他们不是一一对应排着的
不是说了么:如果,name1里只有一个名字,name2里面有好几个名字,那么用如下命令:
gen new=0
replace new=1 if strpos(name2,name1)>0
我没说name2是不是乱序啊。

strpos的功能是寻找name2里面是否存在name1,如果存在,返回name1在name2字符串中的位置,如果不存在,返回0。至于name2是怎么排列的,那根本无所谓。

12
xingxf 发表于 2013-9-21 00:52:00
饺子大神 发表于 2013-9-20 23:59
老师我好像会了,我用了merge以后,match3就是我想要的结果
如果你的问题和你提问的描述是一致的,match3根本就不是你要的结果,merge解决不了你的问题。

13
蓝色 发表于 2013-9-21 01:14:54
xingxf 发表于 2013-9-21 00:49
不是说了么:如果,name1里只有一个名字,name2里面有好几个名字,那么用如下命令:
gen new=0
replace ...
********************************************
*按照你说的方法的
clear

input  ///
str20 name1  str20 name2
王强   张三
张三   泰山
李四   黄石
王五
马武
end


*就你给的图示例子来说,如果name1和name2里都只有一个名字,那用如下命令:
gen new=0
replace new=1 if name1==name2

*如果,name1里只有一个名字,name2里面有好几个名字,那么用如下命令:
gen new1=0
replace new1=1 if strpos(name2,name1)>0

list


******************************************************



. clear

.
. input  ///
> str20 name1  str20 name2

                    name1                 name2
  1. 王强   张三
  2. 张三   泰山
  3. 李四   黄石
  4. 王五
  5. 马武
  6. end

.
.
. *就你给的图示例子来说,如果name1和name2里都只有一个名字,那用如下命令:
. gen new=0

. replace new=1 if name1==name2
(0 real changes made)

.
. *如果,name1里只有一个名字,name2里面有好几个名字,那么用如下命令:
. gen new1=0

. replace new1=1 if strpos(name2,name1)>0
(0 real changes made)

.
. list

     +----------------------------+
     | name1   name2   new   new1 |
     |----------------------------|
  1. |  王强    张三     0      0 |
  2. |  张三    泰山     0      0 |
  3. |  李四    黄石     0      0 |
  4. |  王五             0      0 |
  5. |  马武             0      0 |
     +----------------------------+



这是你说的方法的结果
已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
Sunknownay + 100 + 10 + 1 + 1 + 1 热心帮助其他会员

总评分: 经验 + 100  论坛币 + 10  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

14
蓝色 发表于 2013-9-21 01:24:56
xingxf 发表于 2013-9-21 00:52
如果你的问题和你提问的描述是一致的,match3根本就不是你要的结果,merge解决不了你的问题。
****************************************************
*程序
clear
input  ///
str20 name1  str20 name2
王强   张三
张三   泰山
李四   黄石
王五
马武
end

preserve
keep  name1
gen name=name1
saveold d:\name1.dta,replace
restore

preserve
keep  name2
gen name=name2
drop if name==""
saveold d:\name2.dta,replace
restore

use d:\name1.dta,clear
merge 1:1 name  using d:\name2.dta
list

erase d:\name1.dta
erase d:\name2.dta


*********************************************************
*运行的结果
. clear

.
. input  ///
> str20 name1  str20 name2

                    name1                 name2
  1. 王强   张三
  2. 张三   泰山
  3. 李四   黄石
  4. 王五
  5. 马武
  6. end

.
.
.
.  preserve

.  keep  name1

.  gen name=name1

.  saveold d:\name1.dta,replace
file d:\name1.dta saved

.  restore

.  
.  preserve

.  keep  name2

.  gen name=name2
(2 missing values generated)

.  drop if name==""
(2 observations deleted)

.  saveold d:\name2.dta,replace
file d:\name2.dta saved

.  restore

.  
.  use d:\name1.dta,clear

.  merge 1:1 name  using d:\name2.dta

    Result                           # of obs.
    -----------------------------------------
    not matched                             6
        from master                         4  (_merge==1)
        from using                          2  (_merge==2)

    matched                                 1  (_merge==3)
    -----------------------------------------

.  list

     +----------------------------------------+
     | name1   name   name2            _merge |
     |----------------------------------------|
  1. |  李四   李四           master only (1) |
  2. |  马武   马武           master only (1) |
  3. |  王强   王强           master only (1) |
  4. |  王五   王五           master only (1) |
  5. |  张三   张三    张三       matched (3) |
     |----------------------------------------|
  6. |         黄石    黄石    using only (2) |
  7. |         泰山    泰山    using only (2) |
     +----------------------------------------+

.  
.  erase d:\name1.dta

.  erase d:\na
me2.dta



只有张三才在两个变量中都有

15
xingxf 发表于 2013-9-21 03:10:45
蓝色 发表于 2013-9-21 01:14
********************************************
*按照你说的方法的
clear
你把我写的命令跑了一遍以后,不是再次证明我命令的正确性么?
请问,王强出现在张三中了么?张三出现在泰山中了么?李四出现在黄石中了么?王五出现在缺失值中了么?马武出现在缺失值中了么?都没出现啊,没出现就是0啊。
蓝色版主仔细看看楼主图片中的示例啊。

16
xingxf 发表于 2013-9-21 03:14:12
蓝色 发表于 2013-9-21 01:24
****************************************************
*程序
clear
第一,楼主图片示例不是你这个意思。要不就是示例图片误导了。
第二,name里面是字符串,name1全是一个名字,name2这一列有的单元格是多个名字,你merge能匹配上么?

17
蓝色 发表于 2013-9-21 04:05:52
xingxf 发表于 2013-9-21 03:10
你把我写的命令跑了一遍以后,不是再次证明我命令的正确性么?
请问,王强出现在张三中了么?张三出现在 ...
估计是你理解与楼主说的不一致,
你可以看下面楼主发的另一个链接
https://bbs.pinggu.org/thread-2639482-1-1.html

18
xingxf 发表于 2013-9-21 04:17:40
蓝色 发表于 2013-9-21 04:05
估计是你理解与楼主说的不一致,
你可以看下面楼主发的另一个链接
https://bbs.pinggu.org/thread-26394 ...
恩,还是蓝色版主理解力比较强。我读题错误了,哈哈。
好奇版主是在国内还是在哪?是已经起床了还是没睡啊?

19
deng203 发表于 2013-9-21 10:29:14
看高人的意见

20
tcj198909 在职认证  发表于 2013-9-21 16:55:15
我过来学习一下

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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-22 04:36