楼主: 皖山一流
14072 8

[程序分享] stata编程技巧分享--怎么让程序能和bysort连用 [推广有奖]

  • 4关注
  • 13粉丝

已卖:216份资源

讲师

25%

还不是VIP/贵宾

-

威望
0
论坛币
2357 个
通用积分
156.3010
学术水平
73 点
热心指数
80 点
信用等级
54 点
经验
16517 点
帖子
352
精华
0
在线时间
308 小时
注册时间
2013-12-9
最后登录
2021-1-21

楼主
皖山一流 学生认证  发表于 2015-7-17 18:00:04 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我们知道,要想你的程序能和bysort连用的话就得在程序开始定义,如:
  1. ...
  2. program define .... , byable(...)
  3. .....
  4. ....
复制代码

但是当你的程序在执行过程中需要产生新变量时,这招就不灵了,,,它会报错:... 已经存在。
怎么办呢?
小编下面给出代码中,亲只用将你想要分组执行的命令或者代码填入两行*****之前即可,丝毫不用关心其余的头疼代码。
当然如果你很熟悉stata编程规则,完全可以参考我的方法直接整出命令了~~~
自己今天无聊弄得,以方便以后自己使用,顺便分享下,希望对于刚接触stata的同学有所启发!
  1.                                         *- =============================
  2.                                         *-          BYS_BOX
  3.                                         *- =============================

  4. /*你有想要和-bysort-连用的命令吗?你还在为它提示:“... may not be combined with by”
  5. 而苦恼吗?这款-bys_box-(即bysort箱子的意思)就是为你生的!
  6. 使用补助:
  7. 1.用stata打开本do文件
  8. 2.将任何你想要和bysort连用的命令填入下面两行*******之间,丝毫不用关心这之外的区域!
  9. 3.按下快捷键CTRL+R,即可将程序送进内存中
  10. 4.在stata命令窗口输入:bysort + 你要按其分组的变量们 :  bys_box  , 搞定!
  11. 当然,如果你比较熟悉stata编程,你可以根据本do文件制作出任何满足你要求的可分租执行的命令了!而不用按照上述方法那么麻烦了。*/



  12. cap program drop bys_box                  
  13. program define bys_box  , byable(onecall)  sortpreserve
  14. version 13.0

  15. tempvar anchor_var
  16. gen `anchor_var' = _n
  17. tempvar group
  18. qui if _by() {
  19.         egen `group' = group(`_byvars')
  20. }
  21. qui else {
  22.         gen `group' = 1   //用户没有分组==只有一组
  23. }
  24. qui sum `group'
  25. local ng=r(max) //算出总组数目
  26. tempfile ware_file   //用来储存计算结果的仓库文件

  27. forvalue i=1/`ng'  {
  28. preserve         
  29.         qui keep if `group'==`i'
  30.         
  31.         
  32.         
  33.         *-***************************************************************
  34.         /*请填入你想要和-bysort-连用的一段命令,如:
  35.         gen newvar=xxx */
  36.         
  37.         
  38.         
  39.         
  40.         
  41.         
  42.         
  43.         /* 尽情的放入任何你想要和-bysort-连用的命令吧!!! */
  44.         *- ***************************************************************

  45.         
  46.         if `i'!=1 {
  47.                
  48.                 qui append using  "`ware_file'"
  49.                
  50.         }
  51.         qui save "`ware_file'" , replace
  52.         
  53. restore

  54. }
  55. qui merge 1:1 `anchor_var' using "`ware_file'" , nogen
  56. end
复制代码




二维码

扫码加我 拉你入群

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

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

关键词:stata编程技巧 stata编程 bysort Stata tata 程序 技巧

已有 3 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
Stakiny + 3 + 3 + 3 精彩帖子
夏目贵志 + 50 + 10 + 2 + 2 精彩帖子
niuniuyiwan + 60 + 5 + 5 + 5 精彩帖子

总评分: 经验 + 110  论坛币 + 10  学术水平 + 10  热心指数 + 10  信用等级 + 8   查看全部评分

本帖被以下文库推荐

士不可不弘毅,任重而道远~

沙发
夏目贵志 发表于 2015-7-18 02:44:36
楼主辛苦了!
33行的forvalues,如果正序的话,append之后的文件就是反序,所以是不是33行的时候反序,然后append得到正序的结果更好呢?

藤椅
皖山一流 学生认证  发表于 2015-7-22 10:52:08
夏目贵志 发表于 2015-7-18 02:44
楼主辛苦了!
33行的forvalues,如果正序的话,append之后的文件就是反序,所以是不是33行的时候反序,然后 ...
哈哈,感谢认真看帖
关于这个问题,貌似不用担心,因为在定义程序那一行(第17行)末尾制定了“sortpreserve” ,也就是说你的原始数据是怎么排的,处理完后还是那样排的~~~貌似是这样,呵呵~~~

板凳
夏目贵志 发表于 2015-7-22 10:56:45
皖山一流 发表于 2015-7-22 10:52
哈哈,感谢认真看帖
关于这个问题,貌似不用担心,因为在定义程序那一行(第17行)末尾制定了“sor ...
哦。。。我一开始没看到那个sortpreserve。不好意思。。。。

报纸
皖山一流 学生认证  发表于 2015-7-27 23:50:32
夏目贵志 发表于 2015-7-22 10:56
哦。。。我一开始没看到那个sortpreserve。不好意思。。。。
谢谢宝贵意见呀,多交流

地板
天南水北 发表于 2018-5-17 11:44:23
onecall和recall两个有什么区别?

7
zuse007 发表于 2018-6-3 15:53:23
现有一个面板数据,想对每一个单位进行时间序列的单位根检验。

但是,dfuller与bysort不能连用。

请教有何办法破解?

. bys firm: dfuller Var
dfuller may not be combined with by
r(190);

8
hanxiean 在职认证  发表于 2020-11-16 13:05:26
我用了这个程序,但是提示我是错误的命令名,这是什么情况

9
IDEALM 发表于 2021-4-18 12:26:41
你好,我试用了一下程序,中间添加
cluster k Gender BSharEnd IsIdirecotr Funback IsCocurP Director_TotCO Retired BBTenure,k(3) name(g1)
但最后显示insufficine obseravious
我试了试dis, 单个循环的结果都会出现,但是最终不会出现结果,请问这个应该怎么处理呢?

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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-2-8 01:41