有问题,不要怕!点击推文底部“阅读原文”下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱statatraining@163.com,我们会及时为您解答哟~
喜大普奔~爬虫俱乐部的github主站正式上线了!我们的网站地址是:https://stata-club.github.io,粉丝们可以通过该网站访问过去的推文哟~
好消息:爬虫俱乐部即将推出研究助理供需平台,如果您需要招聘研究助理(Research Assistant or Research Associate),可以将您的需求通过我们的公众号发布;如果您想成为一个RA,可以将您的简历发给我们,进入我们的研究助理数据库。帮我们写优质的推文可以提升您被知名教授雇用的胜算呀!
重磅推出:爬虫俱乐部之前推出的线下培训,得到了各位老师的一致好评。为了更加方便大家学习,满足更多Stata用户的学习需求,爬虫俱乐部近期即将推出在线直播课程,敬请大家关注!
在上篇推文《Hello,MySQL——odbc insert导入stata数据》中,我们自己创建了一个名叫“sample”的新表单,所以在这个表单上我们继续做一点小花样。今天的内容有以下三部分:1.在查询中计算;2.嵌套查询;3.更新数据。只使用一个命令:odbc exec,该命令可以直接输入SQL语句对数据库进行操作。因此本篇文章介绍的三种情景,都是使用SQL语句进行的处理,既快捷又高效。
Sample表单中保存了6位同学的3门成绩,我们想要查询所有同学的总成绩total_score,具体步骤如下:
首先,我们先使用odbc load来加载原始数据库sample表单的数据:
odbc load,table("sample")dsn("Stata_MySQL") noq clear
其次,将我们想要在MySQL中运行的语句保存在局部宏cols中:
local cols `"SELECT name,(math+english+chinese) as total_score FROM sample"'
该语句可以直接计算表单中数学、英语、语文三门成绩的总和,并且标记该信息为total_score
最后,通过使用odbcexec命令在MySQL中返回姓名和总成绩:
odbc exec("`cols'"), dsn("Stata_MySQL")

通过查询我们得知,Alan的成绩最好,总分为268,Mike的成绩最差,只有169分。
既然说到了嵌套,那就必须有两个表才能进行操作,如同创建sample表单一样操作,我们再创建一个hobby的表单(https://raw.githubusercontent.com/Stata-Club/Sharing-Center-of-Stata-Club/master/article/hobby.txt,关于如何运行SQL脚本文件详见本系列上一篇推文《Hello,MySQL——odbc insert导入stata数据》)。并通过以下命令查看hobby表单内容如下:
odbc load,table("hobby")dsn("Stata_MySQL") noq clear
list

这样我们就有了两个有相互关联关系的表。其中,每位学生的成绩都保存在sample表中,每位学生的爱好保存在hobby表中。如果我们想要查询数学成绩大于80分的那些同学的兴趣爱好是什么,这就需要我们首先通过sample表中查询到数学成绩大于80分的是哪些同学,然后在hobby表中查询这些同学的爱好,这就是嵌套查询。具体操作如下:
local cols `"SELECT name,myhobby from hobby where id IN(select id from sample where math >80);"'
odbc exec("`cols'"), dsn("Stata_MySQL")
list
得到结果:

如果我们发现Susan的数学成绩被手误输错了,本应为88分却被输成了63分。这时候我们该怎么通过stata更新数据库中sample表单呢?
首先,我们先使用odbc load来加载原始数据库中有错误的sample表单的数据:
odbc load,table("sample")dsn("Stata_MySQL") noq clear
然后键入“list”显示所有的数据,发现susan的数学成绩有误:

如果我们直接在MySQL对数据进行更新的话,命令应该为:
UPDATE sample
SET math = '88'
WHERE name ='Susan'
因此在stata中,我们将这三条命令放在一个局部宏cols中:
local cols `"UPDATE sample SET math = '88' WHERE name ='Susan'"'
接下来使用odbc exec对sample表单中的数据进行更新:
odbc exec("`cols'"), dsn("Stata_MySQL")
更新完毕后,重新将更新后的数据导入到stata中:
odbc load,table("sample") dsn("Stata_MySQL") noq clear
最后输入“list”查看结果:

经过这几个步骤,更新任务就完成啦。
注:此推文中的图片及封面(除操作部分的)均来源于网络!如有雷同,纯属巧合!
以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。另外,我们开通了苹果手机打赏通道,只要扫描下方的二维码,就可以打赏啦!
应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~
往期推文推荐:
1.爬虫俱乐部新版块--和我们一起学习Python
2.hello,MySQL--Stata连接MySQL数据库
3.hello,MySQL--odbcload读取MySQL数据
4.再爬俱乐部网站,推文目录大放送!
5.用Stata生成二维码—我的心思你来扫
6.世界银行数据批量下载,暗含小心机哟!
7.正则表达式之POSIX字符类元字符
8.Python第一天
9.事件研究大放送
关于我们
微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
