全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
2523 8
2016-04-25




当代码行很多的时候,如果利用子程序,进行模块化编程的话,好处多多:美观、便于维护、易懂等。
但是、、、当子程序需要继承母程序很多暂元的时候,就很费劲了
如下例子:
pro define 母程序
  loc i=
  loc j=
  loc str1=
  loc str2=
  ...
end

pro define 子程序
syntax  ...   //这里为了继承母程序的很多参数,不得不设置很多选项,杂乱的选项让人犯朦。。。。。
end


这个时候应该怎么办呢?
希望指导我的编程设计思维~~
二维码

扫码加我 拉你入群

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

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

全部回复
2016-4-26 09:30:19
用syntax是比较好的办法。这个也是stata比较通行的办法。除此之外有两个选择:
一个是用return的值,比如predict命令会用到regress命令保留的return和/或ereturn的值。
另一个是用global macro。这个比较不推荐,因为用户可能会自定义同名的global macro。
二维码

扫码加我 拉你入群

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

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

2016-4-26 09:49:01
噢,没有太明白~syntax我一直在用,可是跟处理好子程序的很多输入参数有帮助?
利用返回值的话,那得整个程序运行完毕才可以吧~
二维码

扫码加我 拉你入群

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

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

2016-4-26 09:59:00
皖山一流 发表于 2016-4-26 09:49
噢,没有太明白~syntax我一直在用,可是跟处理好子程序的很多输入参数有帮助?
利用返回值的话,那得整个 ...
回复的话请点右下角的回复按钮,不然是没有回复提醒的。

如果你的“子程序”是主程序执行过程中(而不是像regress和predict这种)执行的话,的确是不适合用return这个方法。那现有的就只有三种选择,一个是让子程序处理syntax, 一个是用local macro,一个是用global macro。前两个方法比较推荐。
二维码

扫码加我 拉你入群

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

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

2016-4-26 15:47:56
夏目贵志 发表于 2016-4-26 09:59
回复的话请点右下角的回复按钮,不然是没有回复提醒的。

如果你的“子程序”是主程序执行过程中(而不 ...
您对bysort了解吗,bysort(recall)的话,虽然可以分组逐组执行,但是发现定义的暂元只在第一次有效,当执行到之后的组时,就消失了,很是愁人。。。。
二维码

扫码加我 拉你入群

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

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

2016-4-27 23:22:56
皖山一流 发表于 2016-4-26 15:47
您对bysort了解吗,bysort(recall)的话,虽然可以分组逐组执行,但是发现定义的暂元只在第一次有效,当 ...
我不太清楚你具体要解决什么问题。recall那个部分不理解。但是bysort的功能自己编程也是很好实现的。如果对bysort不满意的话自己写个循环应该就可以完美解决了。bysort的代码我没实际看过。
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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