楼主: wyy19860530
12243 4

[其他] 关于foreach,forvalue的问题 [推广有奖]

  • 0关注
  • 0粉丝

硕士生

7%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
892 点
帖子
59
精华
0
在线时间
164 小时
注册时间
2007-4-18
最后登录
2018-12-19

楼主
wyy19860530 在职认证  发表于 2009-9-13 23:55:57 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
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);

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

扫码加我 拉你入群

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

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

关键词:forvalue foreach Reach value forv matrix 程序

沙发
sungmoo 发表于 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 ……

藤椅
sungmoo 发表于 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即可。
已有 1 人评分论坛币 收起 理由
dxystata + 5 好的意见建议

总评分: 论坛币 + 5   查看全部评分

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

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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-31 03:37