楼主: jzhyue
12855 40

[其他] 感谢Sungmoo版主:将程序变成ado命令(问题完美解决) [推广有奖]

  • 2关注
  • 3粉丝

已卖:7份资源

副教授

35%

还不是VIP/贵宾

-

威望
0
论坛币
398 个
通用积分
477.5302
学术水平
60 点
热心指数
59 点
信用等级
48 点
经验
10958 点
帖子
454
精华
0
在线时间
1118 小时
注册时间
2005-12-31
最后登录
2025-12-9

楼主
jzhyue 发表于 2009-12-10 15:20:42 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
请路过的老师帮个忙:

              在下经常利用如下代码处理数据,因此想将这段代码变成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
二维码

扫码加我 拉你入群

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

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

关键词:sungmoo Sung GMO Sun stata命令 程序

回帖推荐

sungmoo 发表于20楼  查看完整内容

*试一下 cap pr drop ychcsh pr ychcsh syntax varlist , MCode(string) FCode(string) Rep(string) Con(string) tempfile a preserve clear g xxx=. save `a' restore foreach v of var `varlist' { preserve keep `v' `mcode' `fcode' `rep' an `v' `mcode' `fcode' `rep' `con' ereturn list g name=e(depvar) g msd=(e(ss_1)-e(ss_4))/((e(df_3)+1)*(e(df_2)+1)) g fsd=(e(ss_2)-e(ss_4))/((e(df ...

jzhyue 发表于18楼  查看完整内容

郁闷! 请sungmoo和路过的老师、同学们帮忙! 由下列代码中foreach of var varlist所生成的多个temfile不知道如何纵向连接并文件输出? 数据同1#的示例数据。 capture program drop ychcsh program define ychcsh syntax varlist , MCode(string) FCode(string) Rep(string) Con(string) foreach v of var `varlist' { preserve tempfile tem`v' keep `v' `mcode' `fcode' `rep' anov `v' `mcode' `fcode' `rep' ...

jzhyue 发表于14楼  查看完整内容

将sungmoo提供的程序修饰的更简洁和条理化,请sungmoo指导, cap pr drop gsca pr gsca syntax varlist ,MCode(string) FCode(string) Rep(string) marksample cond qui keep if `cond' foreach vi of var `varlist' { qui egen `vi'std=std(`vi') qui bys `mcode' `fcode' (`rep'):egen `vi'e=mean(`vi'std) qui bys `mcode' (`fcode'):egen `vi'mg=mean(`vi'e) qui bys `fcode' (`mcode'):egen `vi'fg=mean(`vi'e ...

sungmoo 发表于11楼  查看完整内容

*前三个变量必须单列(后面的变量可以用缩略式);若使用in条件,则其中不能使用f或l。 cap pr drop gsca pr gsca syntax varlist args m f r marksample cond qui{ keep if `cond' macro shift 3 loc v=subinstr(subinstr("`*'","`if'","",.),"`in'","",.) foreach vi of var `v' { egen `vi'std=std(`vi') bys `m' `f' (`r'):egen `vi'e=mean(`vi'std) bys `m' (`f'):egen `vi'mg=mean(`vi'e ...

sungmoo 发表于9楼  查看完整内容

cap pr drop gsca pr gsca syntax varlist(min=1) foreach vi in `varlist' { egen `vi'std=std(`vi') `if' bys m f (r):egen `vi'e=mean(`vi'std) `if' bys m (f):egen `vi'mg=mean(`vi'e) `if' bys f (m):egen `vi'fg=mean(`vi'e) `if' g `vi'sca=`vi'e-`vi'mg-`vi'fg `if' drop `vi' `vi'std } keep if r==1 drop r end

sungmoo 发表于7楼  查看完整内容

m f r可以按一定规则生成吧? 也就是说,m、f、r的生成,可以是程序的一部分吧?

lizhiyi 发表于2楼  查看完整内容

试试把下面的代码保存为gsca.ado文件: capture program drop gsca program gsca, sortpreserve version 10.0 args m f r syntax varlist(min=1) 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 ...

本帖被以下文库推荐

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

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

板凳
sungmoo 发表于 2009-12-10 16:34:47
楼主最好把自己想达到的结果详细说明一下。

报纸
jzhyue 发表于 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

地板
jzhyue 发表于 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表达的意思

7
sungmoo 发表于 2009-12-10 17:06:00
jzhyue 发表于 2009-12-10 16:46 m  f  r 结构一样,而后面的varlist 结构相同,但变量数是可多可少可不同的
m f r可以按一定规则生成吧?

也就是说,m、f、r的生成,可以是程序的一部分吧?

8
jzhyue 发表于 2009-12-10 17:17:59
sungmoo 发表于 2009-12-10 17:06
jzhyue 发表于 2009-12-10 16:46 m  f  r 结构一样,而后面的varlist 结构相同,但变量数是可多可少可不同的
m f r可以按一定规则生成吧?

也就是说,m、f、r的生成,可以是程序的一部分吧?
m、f、r是试验设计的参数,m、f代表不同的因子,各有不同的水平,r代表重复数,构成m*f*r的数据结构,以后的数据为试验调查数据。
m、f、r是事先设计好的,不能由程序生成固定的。
(m、f、r不能有缺失,而调查数据可以有缺失)

9
sungmoo 发表于 2009-12-10 18:34:07
cap pr drop gsca
pr gsca
syntax varlist(min=1) [if] [in]
foreach vi in `varlist' {
egen `vi'std=std(`vi') `if'
bys m f (r):egen `vi'e=mean(`vi'std) `if'
bys m (f):egen `vi'mg=mean(`vi'e) `if'
bys f (m):egen `vi'fg=mean(`vi'e) `if'
g `vi'sca=`vi'e-`vi'mg-`vi'fg `if'
drop `vi' `vi'std
}
keep if r==1
drop r
end

10
jzhyue 发表于 2009-12-10 19:34:12
9# sungmoo
谢谢
还有个问题:就示例数据而言,这个ado,很好。一旦利用其它类似数据,对应于m、f、r三个变量可能名字就不一样,就需要改变变量的名字(或修改程序中的m、f、r),也就是说现在这个ado缺乏通用性(当然在运行之前我用三个rename就可以搞定)
我想是否可以用个什么命令(比如ds或lookfor或其它)将前三个变量名字提出来,让这个ado具备通用性?这也是我发求助的初衷。

或者:事先将变量顺序排好,我们引用第一个变量、第二个变量
能否用
ds
loca m=word(r(varlist),1)
loca  f=word(r(varlist),2)
我知道regress y x1-x9
就有这个能力将两类变量分开,不知是通过什么途径?

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

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