登录
首页精彩阅读spss读取数据syntax语句
spss读取数据syntax语句
2016-08-02
收藏

spss读取数据syntax语句

生活中,我们常常因为这样或那样的事情而需要从一个城市到另外一个城市。旅途前,我们需要考虑旅途中的各个环节,比如说确定旅行方式(水、陆、空的选择),交通工具的选择及出行站点、出行车次(航班)等等。而把各种形式的数据按照自己的要求转换为SPSS格式数据,就好比我们从一个城市到另一个城市,而SPSS格式的数据就是我们的目的地。


和现实生活一样,利用Syntax将各种形式的数据转换为我们所需的SPSS格式数据也需要我们像旅途一样考虑一些细节问题。例如:我们从一个数据库文档中读取我们所需的数据,首先确定SPSS与数据库间采用何种连接方式(ODBC或JDBC),然后确定采集的数据来自何种数据库(Oracle,DB2,SQL SERVER,ACCESS等),接下来就是确定类似出发站点、车次等一系列细节问题。这样说来好像有点玄乎,下面将结合实例,看Syntax是如何一步一步的从数据库、EXCEL、TXT等格式文档中提取数据。


一、从数据库中读取数据

由于从数据库中读取数据需要输入的代码比较繁琐,一般来说先利用菜单向导操作,在结束前利用Paste将操作大致代码导入Syntax编辑窗口中,然后再根据自己的需要对代码做适当的修改。例如:

GET DATA                  ***告诉SPSS你此行的目的,得到数据***.

/TYPE=ODBC                ***接下来就是选择海陆空了,omgd!是ODBC****.

/CONNECT=                 ***交通工具的选择及细节,利用交通工具将两地连起来就有了CONNECT***.
'DSN=Microsoft Access;DBQ=c:\mydocuments\dm_demo.mdb;'+       (通常这些细节都利用向导直接生成)
' DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;'
/SQL = 'SELECT * FROM CombinedTable'.

***上面安置完毕,到达目的地了,/SQL就好比你到目的地后所做之事***.
EXECUTE.

上面Syntax的作用是将ACCESS数据库中CombinedTable表中所有数据导入SPSS,上面Syntax语句中红色标注的可以说是此语句的核心部分,①、/connect子语句说明从何种数据库从提取数据及提取相关细节,此过程通常由向导生成,一般需要用时复制-粘贴即可;②、/SQL子语句相比/CONNECT语句则是重中之重,也是此次旅途的终极目的。如果从2个不同的表中选取变量,则是 

/SQL =
'SELECT * FROM [table1],[table2]'
' WHERE [conditions]'.
还有select与group by,order by,having 等语句联合运用的情况,更多SQL语法知识则需参考数据库相关书籍(这也是目前许多公司要求做数据分析的懂数据库的原因之一)。

注:单纯从数据库中提取数据并不需要太多数据库知识,单纯了解SQL查询语言就可以了,个人建议读读《SQL循序渐进》。


二、从EXCEL格式文件中读取数据

利用Syntax语句从EXCEL中读取数据并没有太多的技巧,数据读取过程可以简单的分为2类,一类是读取单表数据,另一类则是读取多表数据(与从数据库中读取数据语法类似,只是/CONNECT语句稍有不同)。首先简单的说说第一类从单表中读取数据,例如:从我的文档中读取名叫data的EXCEL工作薄中表salary的[A3:H160]的数据,且将读取数据的第一行作为变量名,其Syntax代码如下:

get data                           ***①告诉SPSS,你的目的—得到数据(get data)***.

/type=xls                          ***②读的数据是什么类型(XLS OR XLSM<EXCEL2007>)***.

/file="C:/mydocuments/data.xls".   ***③告诉SPSS文档的位置***.

/sheet=name 'salary'               ***④告诉SPSS你要读取那个表(缺失时自动读取第一个表)***.

/cellrange=range 'A3:H160'         ***⑤告诉SPSS你要读取表中那些数据***.

/readnames=on.                     ***⑥将读取数据的第一行设置为变量名***.

上面语法明确的表达你的意图,再联系我们在旅途中的种种行为,这个语句就轻而易举的被攻克了。值得一提的是,上面语句中的④⑤⑥三个子语句都可省略,省略后SPSS将从工作薄中第一个表读取所有数据,并将第一行默认为变量名,如果第一行为空,变量名则默认为VAR1,VAR2……,这一过程和利用菜单向导操作效果一样,下面说说怎样从多个表中读取数据,例如: 

GET DATA
/TYPE=ODBC
/CONNECT=
'DSN=Excel Files;DBQ=c:\examples\data\sales.xls;' +
'DriverId=790;MaxBufferSize=2048;PageTimeout=5;'
/SQL =
'SELECT Location$.[Store Number], State, Region, City,'
' Power, Hand, Accessories,'
' Tires, Batteries, Gizmos, Dohickeys'
' FROM [Location$], [Tools$], [Auto$]'
' WHERE [Tools$].[Store Number]=[Location$].[Store Number]'
' AND [Auto$].[Store Number]=[Location$].[Store Number]'.  

上面的代码和从数据库中读取表数据完全一样,只是在/CONNECT语句上做了些许变化,其他的并无区别,当然重点还是后面的提取数据变量语句/SQL,这里要说明的是如果提取变量字符中含有空格的话就需要用[ ]给框起来了,正如上面示例代码所示。 另外,不得不提的是从多表中读取数据较从单表中读取数据的一些局限性,比如不能像单表一样随意选择数据读取范围;读取表中的第一行非空字符都将强制读取为SPSS中的变量;变量类型较单一,只提供了数字和字符两种数据类型等等。


三、从TXT格式文件中读取数据

利用向导从TXT格式文件从读取数据有时候会因数据格式整洁而很方便,有时又会因为格式混乱而使你后面的分析工作变的麻烦,而利用代码则可以一次解决这种问题。通常读取文本格式数据语句分为get data和data list两种,采用何种语句完全凭个人喜好,当然两种方式各有所长,比如CSV文件或是很大的容量的文本数据用get data较data list就方便的多,而在处理程序内数据(begin data……end data)或结构相对较复杂的数据时用data list语句则较get data语句更方便些。根据文本数据格式,data list语句又有data list free/list/fixed之分,这里不便一一道来,通常一般的TXT格式的数据我们很少遇到,这里主要说说从网站数据库中导出的CSV格式的数据转换情况,例如,我们从网站中导出如下CSV格式的数据dara.csv:

ID,Name,Gender,Date Hired,Department
1,"Foster, Chantal",f,10/29/1998,1
2,"Healy, Jonathan",m,3/1/1992,3
3,"Walter, Wendy",f,1/23/1995,2
4,"Oliver, Kendall",f,10/28/2003,2

下面我们将像旅途一样将此csv格式的数据转换为我们所需的.sav格式,

get data                          ***①告诉SPSS,你的目的***.

/type=txt                         ***②告诉SPSS你要乘车还是坐船***.

/file='c:/mydocuments/data.csv'   ***③找到车站码头***.

/delimiters= ","                  ***④司机强调路上安全(数据用","分隔)***.

/qualifier='" '         ***⑤司机介绍如何处理突发事故(比如数据中包含空格,逗号等特殊情况)***.
/arrangement=delimited            ***⑥其他注意情况(限制情况)***.      

/firstcase=2                      ***⑦找到自己的座位(从第2行开始读取数据)***.
/variables= ID F3 Name A15 Gender A1
Date_Hired ADATE10 Department F1. ***⑧到了目的地确定适宜(设定变量名及格式)***.

此次Syntax旅途暂告一段落,当然还有许多其他格式的数据,这里不一一列举,但通常都可以像旅途一样实行转换目的。


数据分析咨询请扫描二维码

客服在线
立即咨询