全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
12300 4
2009-09-13
1. 小弟有个关于写循环语句的问题,原程序如下:
        matrix define x = J(480,41,7777)
        svmat x
        rename x1 nrows   
        rename x2 n_th_row  
        rename x3 st_name
        rename x4 st_id  
        rename x5 year
        rename x6 month  
        rename x7 yeff
        rename x8 meff
        rename x9 deff
        。。。。
        即对matrix x 里的41个列起41个名字

        clear
        matrix define y = J(480,41,7777)
        svmat y
*
        rename y1 nrows   
        rename y2 n_th_row  
        rename y3 st_name
        rename y4 st_id  
        rename y5 year
        rename y6 month  
        rename y7 yeff
        rename y8 meff
        rename y9 deff
        。。。
        即对matrix x 里的41个列起41个名字
        clear
        use x
        append using y
        append using z
        append using zz
        replace nrows = _N
        save dt_mw_2009_04_20_m, replace
        drop ysupport
      
总目标就是对x,y,z, zz这四个矩阵的每个列重新命名,每个列的名字在x,y,z,zz这四个矩阵都一样,最后将这四个矩阵合并
我想对上面4个矩阵的程序简化,
local xlist "nrows n_th_row st_name st_id year month yeff meff deff ypssd mpssd dpssd dexm nmw mw_gnrl mw_youth mw_tip_a mw_tip_y mw_small_a mw_small_y mw_agrclt_a ....."

foreach x of local xlist {
     forvalues i = 1/41 {
          rename x`i' x
      }
}
      
这个Foreach, forvalue 是不是要二重循环呢?真的很迷茫,我是菜鸟,还望大家多帮忙,谢谢

2. 大家看下我这个FOREACH 语句有什么问题呢?
        foreach var of varlist ds_agrclt_a ds_agrclt_y ds_first60_a ds_first60_y ds_first90_a ds_first90_y ds_gnrl ds_oppr_nonagrclt ds_oppr_tip ds_prob_agrclt_a ds_prob_agrclt_y ds_prob_nonagrclt_a ds_prob_nonagrclt_y ds_prob_tip_a ds_prob_tip_y ds_small_a ds_student ds_tip_a ds_tip_y ds_women ds_with_ins ds_without_ins ds_youth {        
        gen `var' = 10
        label variable `var' "reference number for data source on `var', 10 if no info"
        }

目的就是产生若干个dummy variables,每个变量的名字就是varlist后面的那些,每个赋值都为10,然后对于每个variable做个label....但是我运行了
stata 说
no variables defined

如果我改成
.  local dummy "ds_agrclt_a ds_agrclt_y ds_first60_a ds_first60_y ds_first90_a ds_first90_y
>  ds_gnrl ds_oppr_nonagrclt ds_oppr_tip ds_prob_agrclt_a ds_prob_agrclt_y ds_prob_nonagrcl
> t_a ds_prob_nonagrclt_y ds_prob_tip_a ds_prob_tip_y ds_small_a ds_student ds_tip_a ds_tip
> _y ds_women ds_with_ins ds_without_ins ds_youth"

foreach x of local dummy {
  2. gen `var' = 10
  3.  label variable `var' "reference number for data source on `var', 10 if no info"
  4. }

STATA又说
too few variables specified
r(102);

请问大家这个是什么原因呢?非常感谢
二维码

扫码加我 拉你入群

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

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

全部回复
2009-9-16 06:57:35
wyy19860530 发表于 2009-9-13 23:55 总目标就是对x,y,z, zz这四个矩阵的每个列重新命名,每个列的名字在x,y,z,zz这四个矩阵都一样,最后将这四个矩阵合并
*x、y、z、zz四个矩阵列数相同

mat a=(x\y\z\zz)

mat coln a=col1 col2 col3 ……
二维码

扫码加我 拉你入群

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

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

2009-9-16 07:03:38
wyy19860530 发表于 2009-9-13 23:55
2. 大家看下我这个FOREACH 语句有什么问题呢?
        foreach var of varlist ds_agrclt_a ds_agrclt_y ds_first60_a ds_first60_y ds_first90_a ds_first90_y ds_gnrl ds_oppr_nonagrclt ds_oppr_tip ds_prob_agrclt_a ds_prob_agrclt_y ds_prob_nonagrclt_a ds_prob_nonagrclt_y ds_prob_tip_a ds_prob_tip_y ds_small_a ds_student ds_tip_a ds_tip_y ds_women ds_with_ins ds_without_ins ds_youth {        
        gen `var' = 10
        label variable `var' "reference number for data source on `var', 10 if no info"
        }
第一步,把其中的of varlist改成in即可。
二维码

扫码加我 拉你入群

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

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

2015-8-28 22:18:54
sungmoo 发表于 2009-9-16 07:03
第一步,把其中的of varlist改成in即可。
在我这改掉也不行,还是提示说循环第一个变量已经存在
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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