全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
6376 5
2012-04-03
原帖请参考 https://bbs.pinggu.org/thread-1368024-1-1.html

现在问题重新表述为下:
A             B                  C
1001       1                  .
1001       2                  .
1001       3                  .


1002       1                  .
1002       1                  1


1003       2                  .
1003       2                  1
1003       1                  .
1003       2                  1
1003       1                  1
1003       2                  1

A, B, C为三个变量,sort by A,对A=1001来说,B中三个对应值不同,则对应C变量三个值都为空值; 对A=1002和1003来说,B中对应的值至少有两个相同(本例中分别为1和2),当这个重复值第一次出现时赋空值,第二次出现赋值为1

现需要实现此功能命令,若一个数据范围内(如A=1001,1002,1003这个范围内),观察的B变量中第一次出现某值,则对应的C中为空值,当第二次或多次重复出现该值,就赋值为1
二维码

扫码加我 拉你入群

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

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

全部回复
2012-4-3 22:19:42
我尝试的写了下,不知道对不对,LZ可以尝试下。

gen C=.
bysort A:replace gen C=1 if L.B=B

或者
bysort A:replace gen C=1 if B[_n-1]=B[_n]


二维码

扫码加我 拉你入群

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

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

2012-4-3 23:58:36
我已开始也是这么想的,实际上只能比较相邻两个是否相同,如果不相邻就不好判断了,但这是个方向
二维码

扫码加我 拉你入群

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

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

2012-4-4 01:35:37
是不是这样:
sort  a
replace c=.
by a b,sort: gen n=_n
replace c=1 if n~=1
drop n
二维码

扫码加我 拉你入群

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

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

2012-4-4 03:44:35
This should work:

sort A B
egen group=group(A B)
duplicates tag group, gen(dup)
bysort group: replace dup=. if _n==1
replace dup=1 if dup>1 & !missing(dup)
list, sepby(A)          //check your data
二维码

扫码加我 拉你入群

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

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

2012-4-4 13:47:58
楼上二位解答都正确,补充一下,原来B的排列是按时间顺序的,处理后顺序和原来不同了,可增加一个时间变量控制排序
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群