全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
15031 6
2015-03-16
        请教论坛里的各位大牛们,我现在想做这样一个事情。我的数据库里有一列省份数据,我想对每个省份进行循环,如果有这个省份,我就按相应的代码生成省份虚拟变量。举个例子,我想设置一个字符串数组,里面有“北京 天津 重庆”,另外一个代码数组,里面对应“BJ TJ CQ”,如果province变量数据中包含“北京”,我就生成变量名为province_BJ的虚拟变量,其中省份包含“北京”的全为1,其他都为0。我大致写了一下程序,运行出来不正确,请大家帮忙改一下程序,多谢各位了!!我写的程序如下:

local vars "北京 天津 重庆"
local vars1 "BJ TJ CQ"
foreach v of local vars{
        if strpos(province,"v")>0 {
                gen province+"_"+vars1[v.i] = 0
                replace province+"_"+vars1[v.i] =1 if strpos(province,"v")>0
        }
}


二维码

扫码加我 拉你入群

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

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

全部回复
2015-3-16 20:44:45
自己顶,谁能帮我一下哈
二维码

扫码加我 拉你入群

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

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

2015-3-17 14:06:22
这位兄弟似乎是编程出身的。

你可以试试下面这个程序:

local vars "北京 天津 重庆"
local vars1 "BJ TJ CQ"

local i = 0
foreach v in `vars' {
  di "`v'"
  local i = `i' + 1
  cap drop count_`i'
  g count_`i' = (strpos(province,"`v'")>0)
  list count_`i'
}

local i = 0
foreach v in `vars1' {
  di "`v'"
  local i = `i' + 1
  cap drop province_`v'
  count if count_`i' != 0
  if r(N) > 0 g province_`v' = count_`i'
}

事实上,在stata里面我更喜欢直接用stata现成的命令
tabulate province, generate(pro_dummy)
二维码

扫码加我 拉你入群

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

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

2015-3-17 16:28:22
天仕 发表于 2015-3-17 14:06
这位兄弟似乎是编程出身的。

你可以试试下面这个程序:
谢谢兄弟!!是这样兄弟,我为什么不用stata现成的命令,是因为我的省份里面有很多乱七八糟的字符,比如0000,----,aaaa 这种。我用tabulate试过,结果出来190个虚拟变量,但实际上省份虚拟变量也就只有三十多个。其他乱七八糟的那些字符我不知道该怎么处理,所以想自己编程把他写出来。你真是热心,再一次感谢你,希望可以和你多多交流!
二维码

扫码加我 拉你入群

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

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

2015-3-17 17:08:48
天仕 发表于 2015-3-17 14:06
这位兄弟似乎是编程出身的。

你可以试试下面这个程序:
兄弟,请问里面的r(N)是什么意思?
二维码

扫码加我 拉你入群

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

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

2015-3-18 13:04:37
count就是数符合条件的样本数,r(N)就是数出来的结果。
你可以看 help count 最后一行。
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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