全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
2177 3
2013-11-27
悬赏 100 个论坛币 已解决
数据集为
var1
AB
AB
AA
BB
AA
BB
AB
AA
AA
AB
BB


类似的变量很多,希望编程实现,要求将字母不同的设为1,字母相同的令频数多或频率大的设为0,另一个设为2
var1 var2
AB     1
AB     1
AA     0
BB     2
AA     0
BB     2
AB     1
AA     0
AA     0
AB     1
BB     2


谢谢!

最佳答案

bbs0805 查看完整内容

在指定变量的行中输入要赋值的变量名,然后执行以下程序: local var "var1 var2" //指定变量 foreach v of var `var' { tempvar v1 v2 freq no gen `v1'=substr(`v',1,1) gen `v2'=substr(`v',2,1) gen n`v'=2 replace n`v'=1 if `v1'!=`v2' gen `no'=_n sort `v' bysort `v': gen `freq'=_N quietly sum `freq' local max=r(max) repl ...
二维码

扫码加我 拉你入群

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

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

全部回复
2013-11-27 12:53:29
在指定变量的行中输入要赋值的变量名,然后执行以下程序:

local var "var1 var2"       //指定变量
foreach v of var `var' {
      tempvar v1 v2 freq no
      gen `v1'=substr(`v',1,1)
      gen `v2'=substr(`v',2,1)
      gen n`v'=2
      replace n`v'=1 if `v1'!=`v2'
      gen `no'=_n
      sort `v'
      bysort `v': gen `freq'=_N
      quietly sum `freq'
      local max=r(max)
      replace n`v'=0 if `freq'==`max' & n`v'!=1
      sort `no'
}

执行后的结果如下:
var1  var2 nvar1 nvar2
AB    AA     1       2
AB    AB     1       1
AA    BB     0       0
BB    CC      2       0
AA    BC     0       1
BB    BB     2       0
AB    CC     1       0
AA    BC     0       1
AA    BB     0       0
AB    CC     1       0
BB    BC     2       1

二维码

扫码加我 拉你入群

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

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

2013-11-27 22:22:49
bbs0805 发表于 2013-11-27 21:39
在指定变量的行中输入要赋值的变量名,然后执行以下程序:

local var "var1 var2"       //指定变量
foreach v of var `var' {
      tempvar v1 v2 freq no
      gen `v1'=substr(`v',1,1)
      gen `v2'=substr(`v',2,1)
      gen n`v'=2
      replace n`v'=1 if `v1'!=`v2'
      gen `no'=_n
      sort `v'
      bysort `v': gen `freq'=_N
      quietly sum `freq'
      local max=r(max)
      replace n`v'=0 if `freq'==`max' & n`v'!=1
      sort `no'
}

执行后的结果如下:
var1  var2 nvar1 nvar2
AB    AA     1       2
AB    AB     1       1
AA    BB     0       0
BB    CC      2       0
AA    BC     0       1
BB    BB     2       0
AB    CC     1       0
AA    BC     0       1
AA    BB     0       0
AB    CC     1       0
BB    BC     2       1
如何自动给新产生的变量label values呢?
二维码

扫码加我 拉你入群

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

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

2013-11-28 09:53:02
dxystata 发表于 2013-11-27 22:22
如何自动给新产生的变量label values呢?
在原程序基础上直接添加红字部分:
local var "var1 var2"       //指定变量
foreach v of var `var' {
        tempvar v1 v2 freq no
        gen `v1'=substr(`v',1,1)
        gen `v2'=substr(`v',2,1)
        gen n`v'=2
        replace n`v'=1 if `v1'!=`v2'
        gen `no'=_n
        bysort `v': gen `freq'=_N
        quietly sum `freq'
        local max=r(max)
        replace n`v'=0 if `freq'==`max' & n`v'!=1
        sort `no'


      preserve
          tempvar n
          bysort `v' n`v':gen `n'=_n
          keep if `n'==1
          local N=_N
          forvalue i=1/`N' {
               local lab=`v'[`i']
               local val=n`v'[`i']
               local labval`v'=`"`labval`v'' `val'  "`lab'""'
         }
     restore
     label define l`v' `labval`v''
     label value n`v' l`v'

}
结果如下:
2013-11-28_095159.jpg
由于对应变量var2中BB和CC在nvar2中的值都取0,因此建立数值标签后均显示为cc
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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