统计211

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7796|回复: 3
打印 上一主题 下一主题

SPSS Syntax 编程介绍及使用

[复制链接]
跳转到指定楼层
1
发表于 2012-2-23 22:14:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 初出茅庐 于 2012-2-23 22:27 编辑

概述

IBM SPSS Statistics 最初是一个基于命令的交互式程序,随着各种统计算法和实用工具逐年加入,现在已成为一个强大的统计和数据挖掘工具。SPSS 为所有的功能设计了相应的命令,这个命令集就构成了 SPSS 的语法,称为 syntax,在图形界面诞生之前,SPSS 的早期版本就是基于 syntax 运行的,当然,现在也是如此,IBM SPSS Statistics 的后台内核和她的最初版本一样,通过解释 syntax 命令,执行各项功能。

Syntax 与 UI

IBM SPSS Statistics 拥有设计良好,灵活易用的交互界面,任何用户直接通过 UI 轻松操作 IBM SPSS Statistics 的统计功能,完成各种分析工作。SPSS 的设计者也力求设计出简洁易用的界面,避免让用户编写纷繁复杂的 syntax 程序,方便用户使用,SPSS 的易用性历来在业界拥有极高的赞誉。但 syntax 对于 IBM SPSS Statistics 是不可或缺的,用户可以使用 syntax 完成和 UI 同样的工作,在某种程度上讲,syntax 甚至功能更多,更有效率。

首先,如开篇所说,IBM SPSS Statistics 的内核是命令驱动的,syntax 在这里可以说是她的灵魂。在 IBM SPSS Statistics Server 上,有一个命令行工具 statisticsb,仅通过 syntax 使用 IBM SPSS Statistics。在 IBM SPSS Statistics Client 上有 syntax 编辑器,供直接编辑和运行 syntax。而任何 UI 操作最终会转换为相应的 syntax 命令,然后提交运行。

图 1.UI 与 Syntax

其次,有编程经验的用户都知道,修改脚本有时比界面操作更有效率,所以一旦熟悉了 syntax,通过编辑 syntax,更容易维护,修改统计过程。Syntax 的一些高级编程功能,可以帮助用户完成更为复杂的工作,而这些功能是 UI 所不具备的。例如导入非矩阵型的数据,使用逻辑操作或循环操作重新结构化数据,使用宏定义简化调用过程等等。

还有,对于用户最重要的,syntax 是可供存储的执行过程。如果用户要保存设计好的统计过程或统计模型,并打算重复使用,必须将这一系列操作保存为 syntax。在之后的使用中,用 IBM SPSS Statistics 直接打开保存的 syntax 文件即可执行,这是一种很普遍的使用方式。例如某公司需要每天或每周分析问卷调查的数据,并生成报表,分析模型一旦设计好并保存 syntax,之后每次执行仅仅只有数据不同,这只要简单的修改 syntax,例如指定新的数据源,或者需要修改数据的几个变量名或属性,即可执行全部统计分析,至到生成报表。因此,syntax 是 IBM SPSS Statistics 的运行脚本,是她最为有用的功能。

生成和运行 syntax

对于有一定编程经验的用户,syntax 不难掌握,即使对于不熟悉任何编程语言或刚刚使用 IBM SPSS Statistics 的用户,生成 syntax 也是很容易的。通常使用 IBM SPSS Statistics 的 “粘贴”(paste)功能,每个功能模块都设计了“粘贴”按钮,可以对该功能操作生成相应的 syntax 命令。

例如对数据变量进行频率分析,打开 Statistics 主界面,并打开数据文件,在“分析 -> 统计描述”菜单下选择“频率”,选择好了统计变量和统计选项,如图 2,点击“粘贴”,syntax 会自动呈现在 syntax 编辑器中。如果在配置统计模型,未达到运行条件时,“粘贴”按钮呈灰色不可用,如果有统计选项选择有误,也会有提示信息提示错误,因此,“粘贴”可以保证最终所生成的 syntax 是语法正确和满足运行条件的。

图 2.“粘贴”syntax

除了“粘贴”这条快捷方式外,就要手动编写 syntax 了。IBM SPSS Statistics 自带一个 syntax 编辑器,如图 3,以 IBM SPSS Statistics 20 的 syntax 编辑器 为例(SPSS 17 对 syntax 编辑器进行了较大提升,较早版本的 syntax 编辑器更近似于文本编辑器,还在使用 SPSS17 之前版本的用户,对本文中介绍的编辑器也行会感到些许陌生),syntax 编辑器有 5 部分组成:

1.主面板的 syntax 编辑区,用以输入、编辑 syntax。在 SPSS17 之后添加了语法提示功能,更方便输入 syntax。

2.紧邻编辑区左边的竖栏,用以显示行号和断点位置。

3.最左边的 syntax 导航栏,显示一列 syntax 命令的名称,单击命令名称可以快速导航至该命令在编辑区的位置。

4.位于 syntax 编辑区下面的错误提示区,显示运行时出错的命令和错误或警告信息。

5.位于上面的是功能按钮。除了常用的查找,回退等功能外,还有增减注释,调整缩进,设置断点等与编程和调试相关的功能。

在编辑区,用鼠标左键选择需要执行的 syntax,选中的 syntax 会高亮显示,点击绿色右向箭头按钮,或 Ctrl+R,就可以运行 syntax 了。保存的 syntax 文件是一个 .sps 为后缀的文本文件,其实任何文本编辑器都可以用来编辑 syntax 文件。

图 3.Syntax 语法编辑器

syntax 基本规则

Syntax 文件是由一组命令(command)组成的,每个命令含有呈现特定功能的指令。命令是由关键字和用户输入组成,关键字包括:

命令名

子命令

变量名

函数名,如 SUM,DATE.DMY

操作符, 如 逻辑操作符 AND、OR、NOT,关系操作符 EQ、GE、GT、LE、LT、NE

其他特定含义的字符, 如 BY、WITH、ALL、TO 等

用户输入通常是变量名或变量列表,数字和字符串等。其实很多命令不需要含有任何用户输入部分。关键字是大小写不敏感的,为了突出是 syntax 关键字,通常使用大写。用户输入保持大小写不变进行处理。如图 4 syntax 示例 1, 该图截取自 syntax 语法编辑器,通过该编辑器可以更好的展示 syntax 的语法特征,income, age, ed, .05 和 .10 等黑体字都是用户输入,其他大写文字都是关键字。

图 4.Syntax 示例 1

一个命令按层级又可以分为由命令名,子命令和变量组成。如图 4 syntax 示例 1 所示 , 蓝色字体 REGRESSION 是命令名,绿色字体 /MISSING, /STATISTICS 等是子命令名,褐色字体 LISTWISE 等是变量。

命令名,每个命令都有名字,很多命令都可以望名生意。例如,FREQUENCIES 与变量的频率有关,REGRESSION 执行线性回归分析。命令名可以缩写,但至少要由三个字母组成并且可以唯一区分出即可。比如,FREQUENCIES 可以简写成 FRE, FREQ,FREQU 等等,因为只有这个命令是以‘ FRE ’起始的。DISCRIMINANT 和 DISPLAY 都是以‘ DIS ’起始的,这两个命令至少要用前四个字符区分,DISCRIMINANT 可以简写为 DISC,DISPLAY 简写为 DISP。

子命令,多数命令都有子命令,用以指定更多的细则。一个子命令以斜杠(/)开始,到下一条子命令或整个命令结束。要注意的是有些命令的子命令之间是有先后顺序的,比如因素分析命令 FACTOR。

变量,命令和子命令可以包含变量,用以对命令提供参数方法等。变量既可以是单个关键字,如 LISTWISE,也可以带参数,如 PIN(.05)。

另外,每条命令以点号(.)结尾,如果行的第一个字符是星号(*),则星号后直到点号所有内容是注释。

进一步认识每个命令的细则,需要阅读 syntax 手册,但首先要看 syntax chart, 这是 syntax 的语法构成图。 以命令 CORRELATIONS 为例,如图 5, 从图中可以看到我们已经了解了的命令,子命令等基本概念,还需要注意的是各种符号和标识的含义。

图 5.Syntax chart

方括号 [],括号中的内容不是必要的,或是可以省略,省略时按默认值执行。

花括号 {},以纵向排列的花括号内的元素,表示任选其一。

圆括号 (),通常指示括号内的内容是参数,通常圆括号是命令的一部分,不能省略。

双星号 **,指示这是默认值,并且表示该默认值所在的子命令省略时,该默认值起作用。

粗体,也是默认值,该默认值所在的子命令没有省略时,该默认值可以不写。

省略号 . . .,省略号所指代的内容可以出现多次,例如图例中 [/varlist . . .],表示可以为 WITH 变量指定多个 variable list.

通过使用默认值,syntax 的书写可以得到极大的简化,如图 5 所示的 syntax chart,下面两个 syntax 等价。

清单 1.完整 syntax:

  1. CORRELATIONS VARIABLES=age income ed        
  2. /MISSING=PAIRWISE      
  3. /PRINT=TWOTAIL SIG         
  4. /STATISTICS=ALL.
复制代码

清单 2.使用默认值后的 syntax:

  1. CORRELATIONS VARIABLES=age income ed         
  2. /STATISTICS=ALL.
复制代码

命令分类

IBM SPSS Statistics 有上百条命令,而且随着新功能的加入,命令集也在不断壮大,根据命令的功能特点,大体可以分为系统命令,数据文件操作及导入导出命令,Transformation 命令, Precedure 命令,其他辅助命令。

系统命令

如 SET , SHOW 设置全局和系统相关的命令。

例如,

SET OLANG, 设置输出语言,运算结果将以这里设置的语言显示。

SHOW SEED, 输出随机数产生器的 seed 值。某些算法可以指定自己的随机数 seed,如果不另外指定,所有随机数产生器将以此作为默认的 seed 值。

数据文件操作及导入导出命令

IBM SPSS Statistics 有自有格式的数据文件,SAV 文件。针对该文件,对应了相关的命令进行打开(GET FILE),保存(SAVE FILE),创建新数据(NEW FILE)等操作。

对于当前数据集的创建,例如生成数据字典的命令 DATA LIST,生成数据的命令 BEGIN DATA – END DATA.

IBM SPSS Statistics 能导入导出各种常用数据格式,如文本文件 TXT,DAT,XML,HTML RSS Feeds,PDF 等,其他公司如微软的 EXCEL,SAS,IBM Cognos BI 等的数据格式,以及支持各种流行的数据库包括 DB2 UDB for Windows/UNIX version,SQL Server, Oracle,Teradata,Netezza,DB2/400 / DB2 for zOS,Sybase IQ,HP Neoview,MySQL AB Enterprise Edition 等。并能将其他数据源转换为自有的 SAV 格式。这些命令如 GET DATA, GET TRANSLATE 等等。

INPUT PROGRAM – END INPUT PROGRAM 可以生成或处理不规则的数据格式。

数据文件处理方面,比如 MATCH FILES 进行数据合并,AGGREGATE 可用来数据聚集。

Transformation 命令

Transformation 命令用于修改数据变量(IBM SPSS Statistics 称数据集的每一列为数据变量),创建新数据变量,添加新数据行等。Transformation 命令不会导致数据读入,也就是说 Transformation 命令对数据集的改变不会立即执行,直到下一个 Procedure 命令或数据处理命令或 EXECUTION 命令出现才执行。

最常用的如 COMPUTE,RECODE 等等。

逻辑控制语句 IF,SELECT IF,DO IF 等与循环控制语句 LOOP-END LOOP 等可以与 Transformation 命令一起使用,用以实现更为复杂的数据转换。

Procedure 命令

这是最为庞大的一类命令,所有与统计分析,数据挖掘,预测分析等算法功能相关的命令都称为 Proecedure。Procedure 命令会导致数据集一次或多次读入,以进行分析运算,产生表格,图形,新变量,可视化的示意图,PMML,XML 等各种分析结果。

前面提到的 REGRESSION, FREQUENCIES, DISCRIMINANT 等等都是 Procedure 命令。

辅助命令

这一类的命令也有很多,常用的一些命令如:

INCLUDE/INSERT, 导入其他 syntax 文件到 INCLUDE/INSERT 命令当前位置。

COMMENT, 注释,等同于星号(*).

TITLE, 给输出添加标题。

FILE HANDLE, 定义文件或文件路径的句柄,方便输入文件位置。

Syntax 综合应用

日常的应用中,我们编写的 syntax 文件是各类命令的综合使用,下面通过一个简单示例展示 syntax 编程。我们创建一个微小的示例数据,然后对该数据应用 Decision Tree 进行分类。

1. 先给该syntax 起个标题,在输出中将会显示。

  1. TITLE 'my test syntax'.
复制代码

2. 做一些设置。

不在输出中回显 syntax,仅显示运算结果。

  1. SET PRINTBACK OFF.
复制代码

确保输出是简体中文,如果安装的是中文版就不用这项设置了。

  1. SET OLANG=SChinese.
复制代码

为保证显示正确中文,最好把 locale 也设置中文,如果操作系统默认是中文,该项也不用设置了。

  1. SET LOCALE=zh_CN.
复制代码

3. 打开数据源。在这里我们创建一个微小的数据集用以演示,该数据仅有三个数值型变量,gender, age 和 jobcat,分别占用的宽度为 1,4 和 2,并赋予 6 条数据。

  1. DATA LIST FREE /gender(F1) age(F4) jobcat(F2).         
  2. BEGIN DATA         
  3. 1 34 3         
  4. 0 22 1         
  5. 0 40 3         
  6. 1 29 2         
  7. 0 27 1        
  8. 1 33 3         
  9. END DATA.
复制代码

4. 对数据集进行一些改变,增加一个 id 变量,对 gender 和 jobcat 的值添加 lable,这样在显示的时候可以更容易理解。

  1. COMPUTE id=$casenum.         
  2. VALUE LABELS gender 0 'female' 1 'male'.         
  3. VALUE LABELS jobcat 0 'fresh' 1 'junior' 2 'staff' 3 'senior' 4 'advisory'.
复制代码

5. 数据准备好后,使用 Decision Tree,通过 gender 对 jobcat 进行分类分析。使用如下 syntax, 或进入“分析 > 分类 > 树”菜单,选择变量和统计选项,“粘贴”出 syntax。

  1. TREE jobcat [n] BY gender [n]         
  2. /TREE DISPLAY=TOPDOWN         
  3. /PRINT MODELSUMMARY CLASSIFICATION RISK         
  4. /METHOD TYPE=CHAID         
  5. /COSTS EQUAL        
  6. /INFLUENCE age         
  7. /MISSING NOMINALMISSING=MISSING.
复制代码

6. 执行以上 syntax。

完整的 syntax 见图 6,我们可以更清楚的看到各种命令被应用的一起。

图 6.Syntax 示例 2

小结

IBM SPSS Statistics 的 syntax 有众多命令,即使拥有多年使用经验的 SPSS 老用户大多也是先使用“粘贴”功能生成一些 Procedure 命令,然后修改,添加到自己的 syntax 文件中。掌握一些常用 syntax 命令和使用技巧,通过组织 syntax 文件,确实可以有效提升 SPSS 的使用水平,更好的进行任务管理。因此,对于 IBM SPSS Statistics 的用户,请不要忽视 syntax,从“粘贴”键开始,开启你的 syntax 之旅。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

评分

参与人数 1统计币 +12 贡献 +2 收起 理由
veil + 12 + 2 赞一个!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对
2
发表于 2012-2-25 11:21:41 | 只看该作者
很好!!!
3
发表于 2012-2-28 23:35:15 来自手机 | 只看该作者
得好好学学
4
发表于 2013-7-9 21:05:13 | 只看该作者
学习一下
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


免责声明|关于我们|小黑屋|联系我们|赞助我们|统计211 ( 闽ICP备09019626号  

GMT+8, 2025-4-18 08:16 , Processed in 0.086078 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表