- ...
- program define .... , byable(...)
- .....
- ....
但是当你的程序在执行过程中需要产生新变量时,这招就不灵了,,,它会报错:... 已经存在。怎么办呢?
小编下面给出代码中,亲只用将你想要分组执行的命令或者代码填入两行*****之前即可,丝毫不用关心其余的头疼代码。
当然如果你很熟悉stata编程规则,完全可以参考我的方法直接整出命令了~~~
自己今天无聊弄得,以方便以后自己使用,顺便分享下,希望对于刚接触stata的同学有所启发!
- *- =============================
- *- BYS_BOX
- *- =============================
- /*你有想要和-bysort-连用的命令吗?你还在为它提示:“... may not be combined with by”
- 而苦恼吗?这款-bys_box-(即bysort箱子的意思)就是为你生的!
- 使用补助:
- 1.用stata打开本do文件
- 2.将任何你想要和bysort连用的命令填入下面两行*******之间,丝毫不用关心这之外的区域!
- 3.按下快捷键CTRL+R,即可将程序送进内存中
- 4.在stata命令窗口输入:bysort + 你要按其分组的变量们 : bys_box , 搞定!
- 当然,如果你比较熟悉stata编程,你可以根据本do文件制作出任何满足你要求的可分租执行的命令了!而不用按照上述方法那么麻烦了。*/
- cap program drop bys_box
- program define bys_box , byable(onecall) sortpreserve
- version 13.0
- tempvar anchor_var
- gen `anchor_var' = _n
- tempvar group
- qui if _by() {
- egen `group' = group(`_byvars')
- }
- qui else {
- gen `group' = 1 //用户没有分组==只有一组
- }
- qui sum `group'
- local ng=r(max) //算出总组数目
- tempfile ware_file //用来储存计算结果的仓库文件
- forvalue i=1/`ng' {
- preserve
- qui keep if `group'==`i'
-
-
-
- *-***************************************************************
- /*请填入你想要和-bysort-连用的一段命令,如:
- gen newvar=xxx */
-
-
-
-
-
-
-
- /* 尽情的放入任何你想要和-bysort-连用的命令吧!!! */
- *- ***************************************************************
-
- if `i'!=1 {
-
- qui append using "`ware_file'"
-
- }
- qui save "`ware_file'" , replace
-
- restore
- }
- qui merge 1:1 `anchor_var' using "`ware_file'" , nogen
- end


雷达卡







京公网安备 11010802022788号







