排排坐,吃果果,……

2017-08-30 王悦 爬虫俱乐部 爬虫俱乐部

大大大大大新闻————自公众号推送视频讲解环节以来,深受广大读者朋友的喜爱。近日向我们提问的粉丝也是大幅增加呐!为了便捷管理相关信息,提高工作效率,我们对提问方式做了略微调整哟~提问者需点击推文底部“阅读原文”下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱statatraining@163.com,我们会及时为您解答哟~

 诸君安,不知道各位读者小时候是否有过排排坐吃果果的经历,在教室里按照大家坐的位置,依次分配水果,这让小编不禁联想,Stata中是否有这样的命令具有类似的功能,下面小编就带你走进args

args的语法及作用


 argsargument state,意为参数声明,与之前介绍过的一些命令不同,args是在Stata的程序定义语句中使用的命令。Stata是可编程的,可以实现新的命令,这是通过程序定义语句完成的。在Stata中利用program编写新命令时,如果使用args进行参数声明,它会将执行新命令时用户键入的内容的第一个参数分配给宏macroname1,第二个参数分配给宏macroname2,依此类推,参数由分隔它们的空格定义,我们可以通过将名称包含在单引号中来引用宏的内容,例如:`macroname1'`macroname2'等等。

 args不会报错,如果用户指定的参数多于指定的宏,则会忽略额外的参数,如果用户指定的参数较少,则额外的宏将不包含内容。

如何编写新命令

 在介绍args之前,小编先给大家简单介绍一下在Stata中如何利用程序定义语句编写新的命令,它最大的作用在于,如果在写程序的过程中要反复调用同一段代码时,那么可以将这段代码写成子程序,然后直接调用子程序即可。

想象一下如果你向Stata输入hello,Stata也会自动向你问好,这种操作是不是很有意思?你只需要输入以下程序:

capture program drop hello //如果内存中已经有名为hello的命令,则删除,否则跳过这一步骤 

program hello  //开始编写名为hello的子程序

display "你好呀小可爱"  //定义输入hello后将显示的内容,可以自由定义

end  //结束程序编辑

hello  //执行新命令hello

结果如图:

 需要注意的是:这里使用程序定义语句编写的新命令,在你退出Stata或者删除该程序后(program drop hello)便不复存在了。

运用args的实例一

 下面的小例子或许能帮你理解args的作用何在,我们先在Stata中输入以下程序:

clear

capture program drop listargs

program listargs

args a b c d

di "第一个参数为:`a'"

di "第二个参数为:`b'"

di "第三个参数为:`c'"

di "第四个参数为:`d'"

end

listargs

listargs we all love stata

listargs "we all love stata"

listargs we love stata

执行结果如图:

 程序解释:首先我们用程序定义语句编写了一个名为listargs的子程序,接着args进 行了参数声明,它表明将子程序的第一、二、三、四个位置上的参数依次赋给宏`a'、宏 `b'、宏`c'和宏`d',程序编写完成后,调用子程序listargs,listargs后如果不键入任何内容,各个宏也就输出为空白;键入的"we all love stata"表示一个字符串,所以stata将双引号内的内容识别为第一个参数并赋给宏`a',后面的三个宏输出为空白;we love stata只有三个单词,所以宏`d'的内容为空白。

运用args的实例二

args进行参数声明中的参数,不仅仅是字符,数值,也可以是变量,矩阵,文件等任何内容, 下面小编再通过编写新命令gini计算某地区的基尼系数进行详细说明(:下例中使用的数据temp.dta为小编模拟生成的虚构数据,已上传爬虫俱乐部官方网站,请需要的读者自行下载!)

clear

cd D:\Stata15

capture program drop gini

program gini  //定义命令名为gini

egen tp=sum(hhsize)  //hhsize为家庭人口数,tp为总人口数

egen tinc=sum(inc)  //inc为家庭纯收入,tinc为家庭总收入

gen m=inc/hhsize  //m为人均纯收入

sort m  //按人均纯收入从小到大排序

gen gini=1-sum(hhsize/tp*(2*sum(inc/tinc)-inc/tinc))  //计算基尼系数

dis gini[_N]  //显示基尼系数

end

use temp,clear

gini

执行结果如图:

上面的命令只能用于计算家庭纯收入的基尼系数, 如果我们想计算食品消费的基尼系数就必须重新修改程序定义语句中的命令,至少需要将上面程序中的 inc 替换为food,这样操作稍显麻烦,这个时候我们就可以在程序定义语句中使用args,修改后的命令如下:

clear

cd D:\Stata15

capture program drop gini

program gini 

args inc hhsize 

egen tp=sum(`hhsize')

egen tinc=sum(`inc')

gen m=`inc'/`hhsize'

sort m

gen gini=1-sum(`hhsize'/tp*(2*sum(`inc'/tinc)-`inc'/tinc))

dis gini[_N]

end

use temp,clear

gini food hhsize  //命令gini后面键入的第一个变量food的值赋给了宏`inc',第二个变量hhsize 的值赋给了宏`hhsize',计算得到食品的基尼系数

执行结果如图:

 这样一来,即使要计算不同类型的基尼系数,也不需要特地对程序定义语句中的程序依次进行修改,减小了工作量。

什么?!没看懂!!不要紧!!戳下面,听爬虫小将的详细讲解,也欢迎大家的批评指正哟!


以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。另外,我们开通了苹果手机打赏通道,只要扫描下方的二维码,就可以打赏啦!

应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~

                        文字编辑:高金凤

技术总编:刘贝贝



往期推文推荐:

1.高校学术大神:你的导师上榜了吗?

2.中国高校财经、管理与综合类期刊灌水排行榜

3.命令sum2docx输出统计量表到docx文件

4.reg2docx报告你的实证结果吧!

5.爬虫俱乐部又出新命令了——wordconvert转换你的word文件

6.putdocx+wordconvert—将实证结果输出到Word.docx)文档

7.Stata 15Markdown——没有做不到,只有想不到!

8.矩阵和宏的故事

9.shelloutopen anything

10.Putpdf--神奇的转换工具



关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

投稿邮箱:statatraining@163.com

投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

欢迎关注爬虫俱乐部

微信扫一扫
关注该公众号