楼主: zzzzzzyu
1675 5

[数据管理求助] 虚拟变量设置求助 [推广有奖]

  • 1关注
  • 0粉丝

已卖:1份资源

本科生

95%

还不是VIP/贵宾

-

威望
0
论坛币
3754 个
通用积分
1.3500
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1362 点
帖子
14
精华
0
在线时间
229 小时
注册时间
2008-11-15
最后登录
2024-9-26

楼主
zzzzzzyu 发表于 2013-9-20 13:50:11 |AI写论文
200论坛币
我想设置虚拟变量,如果包含P2504,P2506,P2510任何一个,都取值为1,否则为0自己是初学,实在不会,还请会的前辈不吝赐教


ViolationTypeID
P2504
P2599
P2504
P2505,P2506,P2599
P2503,P2599
P2503,P2504,P2505,P2599
P2512
P2504
P2503
P2504
P2504,P2599
P2503
P2503,P2505,P2510
P2503,P2504,P2505,P2514,P2515,P2599
P2504,P2506,P2510,P2515,P2599
P2512
P2504,P2505,P2510,P2599
P2503,P2504
P2503,P2504
P2503,P2504
P2503,P2505,P2515,P2599
P2511





最佳答案

xingxf 查看完整内容

gen dummy=0 replace dummy=1 if strpos(ViolationTypeID,"P2504")>0|strpos(ViolationTypeID,"P2506")>0|strpos(ViolationTypeID,"P2510")>0 你是要在ViolationTypeID这个变量里面搜索P2504,P2506和P2510。而不是说这个变量等于P2504,P2506和P2510。所以你那种做法肯定不行。 strpos函数你可以看一下解释,help strpos。这是一个string fuction,就你这个问题来说,他搜索ViolationTypeI变量中P2504,P2506,P2510的起始位 ...
关键词:虚拟变量设置 虚拟变量 变量设置 Violation ATION

沙发
xingxf 发表于 2013-9-20 13:50:12
gen dummy=0
replace dummy=1 if strpos(ViolationTypeID,"P2504")>0|strpos(ViolationTypeID,"P2506")>0|strpos(ViolationTypeID,"P2510")>0
你是要在ViolationTypeID这个变量里面搜索P2504,P2506和P2510。而不是说这个变量等于P2504,P2506和P2510。所以你那种做法肯定不行。

strpos函数你可以看一下解释,help strpos。这是一个string fuction,就你这个问题来说,他搜索ViolationTypeI变量中P2504,P2506,P2510的起始位置,如果变量中存在你要搜索的内容,返回这个内容开始的位置(如果从第三个字符开始,返回3),如果变量中没这个内容,返回0。

藤椅
陈星晶 发表于 2013-9-20 14:46:00
用这个语句 gen y=(P2504==1|P2506==1|P2510==1)

板凳
陈星晶 发表于 2013-9-20 14:50:08
主要不知道你的P2504是一些什么样的数据类型,但一般关于一个变量的虚拟变量都是用 gen y=(x==?) 比如1990年的年份虚拟变量的话就是 gen y=(year==1990)。你说是三个变量的任何一个,所以存在着或关系,所以使用或运算符|。

报纸
zzzzzzyu 发表于 2013-9-20 14:56:15
是字符型的,在stata的数据中显示是红色的
这是我做的,不知道错在哪里
gen Violation= 0
replace Violation=1 if (ViolationTypeID=="*P2504*")!(ViolationTypeID=="*P2506*")!(ViolationTypeID=="*P2510*")
运行后搜索不到,没有变量能变成1
感谢各位了,很诚心的跟各位求教

地板
zzzzzzyu 发表于 2013-9-20 22:08:14
很感谢,设置成功了,而且还学到了很多,很感谢

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

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