在上一篇推文中,我们用了比较详细的篇幅讲述了如何配置MySQL的odbc驱动,odbc驱动起到的是桥接作用,它是MySQL和Stata的通信渠道,三者的关系具体见下图。
事实上凡是当前主流的数据库,如oracle、MySQL、SQL Server都存在相应的odbc驱动,所以都可以与Stata进行连接交互,其原理是一样的。而在数据库的江湖中,占据天下大半的都是关系型数据库,如Oracle、MySQL、SQL Server,它们使用大体相同的SQL语言进行数据处理,因此只要明白了Stata与MySQL如何交互,Stata与其它数据库的交互方法也就一通百通了。
从本篇文章开始,我们将逐一介绍在Stata中操作数据库的常用语法与命令,快快与小编一起学。
数据库选择
为了方便大家对照推文操作,我们创立一个新的odbc连接,连接MySQL初始化后自带的数据库mysql,之后我们推文的所有操作都是对该数据库的,只要大家安装完毕MySQL,即能对照本系列推文操作。
创立odbc连接的方法详见上一篇推文,我们创立的odbc连接名为Stata_MySQL。
小试牛刀:在Stata中查看数据库情况
完成了上一篇推文的设置后,打开Stata,在命令行内输入odbc list查看当前有哪些可用的odbc驱动实例
可以看到,之前小编添加的名称为Stata_MySQL实例已经添加成功并被查找到。
那么我们继续输入命令odbc query "Stata_MySQL"用来查看在实例Stata_MySQL中有哪些表。
可以看到,我们的实例所连接的数据库mysql内的所有表名称已经被读取出来。这说明,我们Stata已经可以自由调取该数据库内的内容。
tips:什么是“表”?表是关系型数据库中的一个特定术语,用以记录一组有相同变量的数据。就像Stata的数据集一样。一个MySQL数据库中可以包含多张表。
odbc des
使用odbc des可以查看某个表单内的基本情况,其语法为
odbc describe ["TableName" , connect_options]
在这里,我们查看Stata_MySQL中的表proc的基本情况,如这个数据集有多少个变量,变量类型是什么,输入语句
odbc des "proc" , dsn("Stata_MySQL")
可以看到,Stata向我们报告了DataSource为Stata_MySQL,Table为proc然后是该表内的变量及其类型。
我们还可以发现,在DataSource和Table右侧还有query与load便捷命令,您可以点击它们来查询该数据库内有哪些表及加载该表。
odbc load
该命令用于加载某个指定表中的数据,最通用的方法是直接在exec选项中写入SQL语句来载入。如我们想要加载proc中的所有数据,就直接在exec()选项中写入SQL语句SELECT * FROM proc如下
odbc load, exec(`"SELECT * FROM proc"') dsn("Stata_MySQL")
list in 1/5
同时Stata也提供了一个傻瓜式读入方式。
odbcload,table(proc) dsn("Stata_MySQL") noq
这里只需要指定table和dsn,并且加上一个参数noq,即可将该表内的所有数据都加载下来。如果你需要对变量进行一些改动,同样可以这样写
odbc load NAME = name created in 1/6 ,table(proc) dsn("Stata_MySQL") noq clear
在这里我们只载入两个变量name和created,对name变量重命名为NAME并只取1-5条数据。
tips:名为mysql的数据库内包含的是系统配置的相关信息,我们可以使用root账户浏览,这是安全的,也可以对其直接修改,但是强烈不推荐你这样做,除非你完全清楚你在做什么。
更多参数
1.noquote(noq)将自动消除表名称带来的字符串引号,对于SQL语句来说,表名是不用也不能加上双引号的,例如
SELECT * FROM table1;在MySQL中是正确语句,可以查询出来,但是
SELECT * FROM"table1";是非法语句,查询失败
而在Stata中使用odbc load,table(proc) dsn("Stata_MySQL")语句加载数据时,Stata会自动为table(proc)选项中的表名加上引号,导致最后转化出来的语句非法,为了避免这种情况,只要是使用odbc load,table(tablename) dsn("db_name")语句时,一定要加入noq选项来取消table(proc)中的引号,避免出错。
2.lowercase(low)将数据库表变量中的大写字母全部改为小写。这确实是很有用的一个选项,因为许多数据库的变量名统一用大写字母表示。
3.sqlshow(sql)将展示你的每一条odbc命令操作最后被转化为的SQL语句的样子,如我们使用odbc load导入数据时
odbcload ,table(proc) dsn("Stata_MySQL") noq clear sql
得到结果如下:
是的,虽然我们输入了一条Stata命令,但后台将其最后转化为了相应的SQL语句,那么如果我们去掉noq选项后呢?
odbcload ,table(proc) dsn("Stata_MySQL") clear sql
这下我们彻底明白了为什么必须要加noq参数,因为带有双引号的表名在SQL语句中是非法的。
注:此推文中的图片及封面(除操作部分的)均来源于网络!如有雷同,纯属巧合!
以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。另外,我们开通了苹果手机打赏通道,只要扫描下方的二维码,就可以打赏啦!
应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~
文字编辑:赵宇亮
技术总编:刘贝贝
全心全意为人民服务
坚持为同学排忧解难
关于我们
微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
领取专属 10元无门槛券
私享最新 技术干货