全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
12604 40
2009-12-10
请路过的老师帮个忙:

              在下经常利用如下代码处理数据,因此想将这段代码变成ado文件。
          命令格式如stata命令格式  或其它格式

        gsca  m  f  r  varlist  [if] [in]

我用的代码如下(示例数据在附件中):

foreach vi in dans blzh rzh lch lh water {
egen `vi'std=std(`vi'), mean(0) std(1)
bys m f (r):egen `vi'e=mean(`vi'std)
bys m (f):egen `vi'mg=mean(`vi'e)
bys f (m):egen `vi'fg=mean(`vi'e)
gen `vi'sca=`vi'e-`vi'mg-`vi'fg
drop `vi' `vi'std
}
keep if r==1
drop r
附件列表

示例数据.rar

大小:82 Bytes

 马上下载

二维码

扫码加我 拉你入群

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

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

全部回复
2009-12-10 16:26:30
jzhyue 发表于 2009-12-10 15:20
请路过的老师帮个忙:

              在下经常利用如下代码处理数据,因此想将这段代码变成ado文件。
          命令格式如stata命令格式  或其它格式

        gsca  m  f  r  varlist  [if] [in]

我用的代码如下(示例数据在附件中):

foreach vi in dans blzh rzh lch lh water {
egen `vi'std=std(`vi'), mean(0) std(1)
bys m f (r):egen `vi'e=mean(`vi'std)
bys m (f):egen `vi'mg=mean(`vi'e)
bys f (m):egen `vi'fg=mean(`vi'e)
gen `vi'sca=`vi'e-`vi'mg-`vi'fg
drop `vi' `vi'std
}
keep if r==1
drop r
试试把下面的代码保存为gsca.ado文件:

capture program drop gsca
program gsca, sortpreserve
version 10.0
args m f r
syntax varlist(min=1) [if] [in]
marksample touse
foreach vi in dans blzh rzh lch lh water {
egen `vi'std=std(`vi'), mean(0) std(1)
bys `m' `f' (r):egen `vi'e=mean(`vi'std)
bys `m' (f):egen `vi'mg=mean(`vi'e)
bys `f' (m):egen `vi'fg=mean(`vi'e)
gen `vi'sca=`vi'e-`vi'mg-`vi'fg
drop `vi' `vi'std
}
keep if `r'==1
drop `r'
end
二维码

扫码加我 拉你入群

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

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

2009-12-10 16:33:19
lizhiyi 发表于 2009-12-10 16:26 foreach vi in dans blzh rzh lch lh water {
我猜作者这一步想使用变量通配符(对m f r以外的变量操作)。
二维码

扫码加我 拉你入群

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

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

2009-12-10 16:34:47
楼主最好把自己想达到的结果详细说明一下。
二维码

扫码加我 拉你入群

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

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

2009-12-10 16:46:52
谢谢!可能我没有把要求表达清楚。


关键每一次foreach vi in后面的varlist是不一样的,即:数据结构相似,数据和变量不一样(m  f  r 结构一样,而后面的varlist 结构相同,但变量数是可多可少可不同的)
比如我想运行
gsca   m   f  r   x1 x2 x3 x4
lizhiyi 发表于 2009-12-10 16:26
试试把下面的代码保存为gsca.ado文件:

capture program drop gsca
program gsca, sortpreserve
version 10.0
args m f r
syntax varlist(min=1) [if] [in]
marksample touse
foreach vi in dans blzh rzh lch lh water {
egen `vi'std=std(`vi'), mean(0) std(1)
bys `m' f (r):egen `vi'e=mean(`vi'std)
bys `m' (f):egen `vi'mg=mean(`vi'e)
bys `f' (m):egen `vi'fg=mean(`vi'e)
gen `vi'sca=`vi'e-`vi'mg-`vi'fg
drop `vi' `vi'std
}
keep if `r'==1
drop `r'
end
二维码

扫码加我 拉你入群

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

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

2009-12-10 16:49:41
sungmoo 发表于 2009-12-10 16:33
lizhiyi 发表于 2009-12-10 16:26 foreach vi in dans blzh rzh lch lh water {
我猜作者这一步想使用变量通配符(对m f r以外的变量操作)。
同意sungmoo表达的意思
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
首页上一页下一页跳至第
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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