【SAS Says】基础篇:SAS软件入门(上)

前言·数说君的话

在统计软件里,SAS算是一哥了,虽然R免费开源有各种统计函数、python功能多各方面比较平衡,但是、但是——SAS贵啊!正版的SAS一年要上百万,不是土豪用不起啊!

大家可以在前程无忧上分别搜索一下SAS、R和Python,对比一下,招SAS的公司都是大型药厂、外企、金融机构特别是银行...相比之下,R在学术界用的较多,Python在初创或者创新公司用的比较多。从这里看钱途,SAS是足以称为“高大上”的!

其实,凭良心地、以数说君自己的感受来说,SAS做统计分析确实是太方便了!SAS的做统计分析最权威可靠、处理海量数据非常快,它的各种模块如Base模块提供了丰富的数据管理功能(还支持SQL语言对数据进行操作!)、STATA模块覆盖了所有实用的统计分析方法、QC模块提供全面质量管理的工具、IML模块提供强大的矩阵运算编程语言、OR模块提供全面的运筹学方法......

SAS公司的一位市场总结Anee Milley曾经回应SAS与R之争时这样说道:

We have customers who build engines for aircraft. I am happy they are not using freeware when I get on a jet. 我们有一些客户,为整机制造引擎。当我乘机时,很高兴他们没有使用免费软件(来设计引擎)。

作为学习者,这种极端的观点咱们听听就行,下面一段话引自“Think SAS”这篇文章,数说君觉得很有道理:

一门编程语言,只要能实现分支(if . . . then . . .)和循环(for/while/do . . . loops),就能够完成几乎所有的运算。这样说来,单问SAS是不是比R强大,或者R是不是比SAS强大就是一个意义不大的问题。它们都能较好地完成大多数的任务,强不强大的区别,在于背后的用户。一些更好的问题或许是,比如,它们的某些模块相比起来如何,它们的扩展性相比如何、它们的运算效率相比如何等等。个人认为,最好的问题是,在我现在如此这般的情况下,哪一款软件最适合我?

因为要写SAS,所以说了几句SAS的好话,最后还是要建议大家,关注数说君(微信公众号:数说工作室,或者微信号:shushuojun),学好SAS、学好Python、学好R、学好Matlab !

本系列叫《SAS Says》,将从零基础开始,带大家进入SAS的世界中,大致分为基础篇、进阶篇和高级篇,基础篇中用的是SAS的经典入门教材——《the little SAS book》,收录的是本人的中文笔记,老手也可以复习一下一些基本的知识(英文原文也非常的易懂,感兴趣可以直接看原文)。


特别说明:本节【SAS Says】基础篇:SAS软件入门(上),用的是数说君学习《The little SAS book》时的中文笔记,我们认为这是打基础的最好选择。

转载请在文章开头注明微信号:shushuojun,谢谢!

本节目录:(老手建议复习一下1.4、1.5和1.7中的撤回程序)

SAS软件入门(上)

1.1 SAS语言

1.2 SAS数据集

1.3 SAS程序的两个过程

1.4 数据步的内置循环

1.5 选择一个提交程序的方式

1.6 SAS视窗环境中的视窗和命令

1.7 在SAS视窗环境中提交程序


SAS软件入门(上)

1.1 SAS语言

许多软件要么是菜单驱动,要么是命令驱动(输入命令——看结果)。SAS两者都不是,在SAS中,你用一个叫做SAS程序的一系列指令语句。

SAS程序 一个SAS程序就是一个按顺序执行的语句序列,一个语句给SAS下达信息和指令,且必须要正确的安放。一个常用来与SAS程序做类比的例子是去银行取款,你进入银行、排队、轮到你,那么你会对柜台谁你想做的事,叙述语句可能会是这样:

I would like to make a withdrawal.

My account number is 0937.

I would like$200.

Give me five 20s and two 50s.

注意第一句话说了你想做的事情,之后把相关信息传递给柜台并帮你完成要求。这里信息传递的顺序不重要,重要的是在你的叙述中,首先要说明你要做什么。你不能先说:“Give me five 20s and two 50s.”这会使柜台小姐一头雾水。此外,你必须确保后面的语句都围绕第一句展开。

SAS语句 像任何语言一样,SAS语句的编写也需要遵守一些语法规则。幸运的是,相比英语来说,SAS语句的规则不仅少,而且简单。

最重要的规则是:

每一个SAS语句都由一个分号结尾

听起来很简单,但即使最富有经验的SAS程序员也会偶然忘记分号。如果你能记住这个规则,再来看看另外两个规则吧。

SAS程序布局 让每一条语句看起来整洁、用缩进来表现语句的各个部分,这是很有用的,但不是必须的:

  • SAS语句不区分大小写。
  • 一条语句可以持续到第二行(只要不把一个单词分开)。
  • 几条语句可以用一行。
  • 可以在任何一列中开始一条语句

注释 可以在你的程序中插入一些注释,让它更容易明白。即使你插入一些你喜欢的食物品名也不会对程序有所影响,因为SAS不读取注释。但不要忘记注释是为了让某人更轻松的学习你的程序,并明白你为什么这么做。

*Read animals’weights from file;

DATAanimals;

INFILE’c:\MyRawData\Zoo.dat’;

INPUTLions Tigers;

PROCPRINT DATA=animals; /*Print the results*/

RUN;

有两种注释方法,一种是*号和;号;一种是用/* */表示,注意第二种注释方法不能放在第一列

错误 SAS程序通常将执行的错误标注为醒目的红色字母,你可能忘了分号,拼错了字母,按错了键盘,一个小错误会使得整个程序无法运行。当你看到红色部分多余黑色部分的时候,不要灰心。

1.2 SAS数据集

在你进行分析、撰写报告、对你的数据进行任何处理之前,SAS必须能够处理你的数据,你的数据必须是一种叫SAS数据集的特殊形式。

变量和观测值 在传统的SAS术语中,数据包括变量和观测值。采用相关的数据库的术语,SAS数据集也被叫做表、观测值也被叫做行、变量也被叫做列,你可以看到下面这个包含一些数据的表。

数据类型 未加工的数据有多种形式,但SAS将其简单化。在SAS中只有两种数据类型——数值型和字符型。数值型完全是数据,可以被加减乘除、可以是正负且是小数。字符变量是除数值之外的类型,可以是数值、字母、和一些特殊的字符(¥、!),最多可以占用32767个字节长度。

在上面这个表中,姓名是字符变量,身高和体重是数值变量,ID,既可能是数值有可能是字符,依据你的选择。

缺失值 数据有时会有些不完美,某些变量的个别观测值会缺失。字符变量的缺失值用空格表示,数值变量的缺失值用句号(.)表示。上表中,体重的第五个观测值缺失,用.表示。姓名的第六个观测值缺失,用空格表示。

SAS数据集的大小 在SAS 9.1之前,SAS数据集可以包含32767个变量,从SAS 9.1开始,SAS可包含的最多变量数由你的电脑可用资源决定(内存,CUP?)。但是超过32767个变量的SAS数据集不能用在早期的SAS版本上。

SAS命名规则 为你的变量和数据集命名,使它们容易被辨别。A,B,C这样的名字可能看起来很完美,写程序的时候也很方便,但当你6个月后再使用这些数据时,你会发现name,height,weight这样的名字更有用。为变量和数据集命名时要遵守如下规则:

  • 名字的长度要小于等于32个字节。
  • 以字母或下划线开头。
  • 可以包含字母、数字、或者是下划线,不能是%$!*&#@。
  • 可以是小写或大写字母,且不区分大小写。

SAS数据集储存的文件 SAS数据集包含了一些类似名称、创建日期、创建用的SAS版本等信息。SAS也储存了每个变量的信息,包括名称、类型、长度、数据集中的位置。这些信息叫做数据集的描述部分,它使得数据集可以自我编制(self-documenting)。

1.3 SAS程序的两个过程

SAS程序有两个基本模块:数据步和过程步。一个典型的SAS程序,由数据步创建SAS数据集开始,再由过程步分析数据。这里有一个例子:数据步中将米转化成千米,过程步中输出结果

数据步和过程步由语句组成(废话),一个过程少至1条语句、多至几百条。新手常犯的错误是将两种过程语句用混,只要记住数据步负责读取、修改数据,过程步负责分析数据、输出报告和效用函数,就不会犯错。

数据步由DATA语句开始:data+数据名。上例中数据步处理了名为distance的数据。为了读取外部数据、未加工的数据,数据步提供了DO LOOPS,IF-THEN/ELSE,以及一些数值和字符函数。数据步也可以按照你想要的方式合并数据集,包括联接(concatenation)和合并(match-merge)。

过程步由proc语句开始:proc+过程名(print、sort、means…),SAS过程步可以处理从数据储存、输出到方差分析、3D图表的一切操作。

当程序遭遇DATA\PROC等标志着新程序开始的语句时,之前的程序结束。如果运行的是批处理,则run代表语句的结束。Run告诉SAS去执行所有之前的程序行,上图的那个程序,当proc出现时,代表data过程结束。

典型的程序是以DATA语句开头,输入或修改数据,然后将数据传递给PROC语句。但并不一定非要用这种模式来混合data和proc语句,你可以用任何顺序来排列data和proc两者的顺序,一个程序甚至可以仅有data语句或proc语句。

下表是data语句和proc语句的一些基本不同点:

这只是一个简化表,SAS软件非常灵活,所以data语句和proc语句之间真正的区别也是很模糊的。记住,这个表并不是说proc语句永远不能创建SAS数据集,或者DATA语句永远不能够分析生成报告。

1.4 数据步的内置循环

Data步读取并修改数据,让你以灵活的方式控制处理数据。Data步也有一个潜在的、内置的循环语句。你不用告诉SAS去执行这个循环,SAS会自动执行。

数据步按照一行一行、一个观测值一个观测值的顺序执行

这句话的表意并不明确,许多新手直到成了老手都没明白这句话的含义。

数据步“一行一行的执行”,这句话很好理解。但很多新手还是容易在这里出错,例如在没有创建一个变量之前就使用它,如果Z变量是X、Y两个变量组合的新变量,那么必须确定创建Z变量的语句在创建X、Y变量语句之后。

而“一个观测值一个观测值的执行”就不是那么容易理解。这意味着SAS先读取一个观测值,然后对这个观测值进行数据步的所有语句(当然也是一行一行的),然后再读取第二个观测值执行。每次执行SAS只有一个观测值。

我们将SAS执行的图景放慢:SAS从你的数据集中读取一个观测值。SAS对你的这个观测值执行数据步,如果数据步一直运行到结束而没有错误,SAS会把当前的观测值写入一个新的、输出数据集中,并返回到数据步开头,读取第二个观测值进行执行。当最后一个观测值都被写入输出数据集中之后,SAS结束数据步,进入下一个步。

有一个类比,数据步就像是一个投票程序。当你来到投票的地点,你会站在别人后面进行排队,排到你时,你会被问到:你叫什么名字,住在哪里。当你回答之后,你可以投票。在这里,排队的人就像是观测值,投票的程序就像是数据步。一次只能让一个人投票,每个人都相互独立。并且投票的程序是一步一步来的,你不能没说明自己的姓名和住址之前就投票。

1.5 选择一个提交程序的方式

目前为止我们讨论了写SAS程序,但仅仅写不能带给你任何结果,你必须要提交并执行。有数种方法可以执行SAS程序,但不是任何方法都适合于你的操作环境。查找一下SAS帮助文档,或者咨询下你的SAS顾问,看看哪种方法适合你的操作环境。

SAS视窗环境

如果你使用SAS是按照系统提示,或者是点击SAS的图标,那么你适合使用SAS视窗环境。在这种交互式的环境中,你可以写入、编辑SAS程序,提交处理、浏览、输出结果的SAS程序。此外,视窗有许多功能可以处理不同的任务,如管理SAS文件、定制界面、访问SAS帮助文档、导入和导出数据。你的视窗环境的界面取决于你电脑的的类型、使用的终端、电脑操作系统和启动SAS时实际的选择。如果你使用的是个人电脑,那么SAS视窗环境的感觉和其他软件类似。

SAS企业向导

如果你有SAS企业向导软件,这个软件在windows下即可运行。你可以用这个软件提交程序:使用插入菜单打开代码窗口,输入序或打开现有SAS程。之后你可以用本地电脑、或者在远程服务器上(需要安装)运行SAS程序。

非交互式模式

非交互式模式是SAS程序语句已先存于你系统的文件中,直接执行那个文件。非交互式模式可以让SAS立即执行程序,通过某个指令开始($),后接文件名,如:

$ SAS Myfile.sas

批处理或后台模式

在批处理或后台模式下,你的程序存于一个文件中,SAS会自动执行,你不需要在电脑旁,如果程序多,SAS会将这个程序进行排队等待。这种模式通常用在大型电脑中,因此通常可以一次性处理多个任务。批处理或后台模式的成本比较低,适合于大型工作,工作完成后,结果会存于文件夹中,你可以任何时候输出查看。批处理未必适合你的操作环境,另外提交方式也会有不同,最好查看SAS帮助文档,或咨询SAS顾问。

远程提交

如果你安装了CONNECT模块,可以进行远程提交,即在一台电脑上(本地)编写程序,在另一台电脑上(远程)处理,结果会返回本地电脑。当你处理大型任务,而你的电脑性能又不够时,可以连接到远程的高性能电脑上,也可访问远程电脑的分享文件。

交互行模式

交互行模式下,SAS每次提示用户输入一个语句,想改正输入的语句不是那么容易的。因此除非你足够优秀和熟练,否则最好不要用这个模式。你可以用endsas并回车来退出这个模式:

Endsas;

如果你想知道为什么会进入这个模式,并且在以后避免进入,你需要咨询SAS顾问。

1.6 SAS视窗环境中的视窗和命令

SAS视窗

SAS有五种基本的视窗(窗口):结果视窗、资源管理器视窗、和三种程序视窗:程序编辑、日志、输出。除此之外,在获得SAS帮助、改变SAS系统选项、定制SAS人机会话等情况时,可能还会用到其他的视窗,下图显示了Microsoft Windows SAS会话中默认的视图:

编辑窗口 编辑窗口中你可以输入、编辑、提交SAS程序。Windows操作环境默认的是增强型编辑窗口,它对语法更敏感,并用颜色标注程序,使得更容易理解和发现错误。其他操作环境默认的是程序编辑窗口,并随操作环境和SAS版本的不同,界面特征也不同。

日志窗口 日志窗口是关于SAS会话的说明。在提交SAS程序之后,任何的说明、错误、警告和程序语句都会显示在日志窗口上。

输出窗口 如果程序产生需输出的结果,那么会反映在在输出窗口中。

结果窗口 结果窗口就像输出窗口的一个目录表,以提纲形式列出了输出的每一个部分。

SAS命令

SAS命令是为了不同的任务,你有三种方式发出命令:菜单、工具栏、SAS命令栏,如下图:

菜单 (大部分操作环境都会有一个下拉菜单要么在窗口上方要么在屏幕上方…..oh my god!略)

工具栏(不是所有的操作环境都有工具栏…略!)

SAS命令栏 可以在这里输入SAS命令,一些操作环境中,命令栏坐落在工具栏中,另一些操作环境中,每个SAS窗口都有一个命令行(command line),通过语句command=>激活。大部分命令是可以直接用菜单进行选择的。

控制你的视窗你可以通过菜单、命令栏、点击的方式激活任何一种程序窗口

1.7 在SAS视窗环境中提交程序

将你的程序放入编辑窗口中 你可以通过输入,或者打开现有程序文件的方式将程序放入编辑窗口中。打开现有的程序文件,可以通过菜单-打开,也可以通过工具栏的图表,或者直接将文件拖放到编辑窗口中。

提交你的程序 你有几种方式来提交程序:

使用工具栏的提交图表

激活命令栏,输入submit命令回车。

从run运行的下拉菜单中选择submit提交

上图显示了如何在windows视窗中提交增强型编辑窗口的程序。

访问SAS日志和输出 提交程序后,日志窗口和输出窗口会有相应的日志和结果显示,如果你使用的是增强型编辑窗口,之前的程序会保留,如果使用的是程序编辑窗口,之前的程序不会保留。如果你的程序产生了输出,那么结果窗口会显示这些输出的目录,下图是一个例子,显示了提交程序之后,增强型编辑窗口、日志窗口、结果窗口、输出窗口的样式。

取回你的程序 如果不幸你的程序出现了问题,你需要再次运行,对于程序编辑窗口,由于之前的程序不在保留,因此需要调回命令(recall),有两种方法:

命令窗口中输入recall

激活编辑窗口,从运行(run)下拉菜单中选择

如果不停的使用recall命令,SAS可以一直往前调回程序,知道所有提交的程序都被调回。

本文分享自微信公众号 - 数说工作室(shushuojun)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2015-06-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏烂笔头

Python爬虫代理IP池

目录[-] 在公司做分布式深网爬虫,搭建了一套稳定的代理池服务,为上千个爬虫提供有效的代理,保证各个爬虫拿到的都是对应网站有效的代理IP,从而保证爬虫快速...

1.1K60
来自专栏烂笔头

Python爬虫—破解JS加密的Cookie

目录[-] 前言 在GitHub上维护了一个代理池的项目,代理来源是抓取一些免费的代理发布网站。上午有个小哥告诉我说有个代理抓取接口不能用了,返回状态521...

90970
来自专栏烂笔头

在Python应用中使用MongoDB

目录[-] Python是开发社区中用于许多不同类型应用的强大编程语言。很多人都知道它是可以处理几乎任何任务的灵活语言。因此,在Python应用中需要一个...

46540
来自专栏烂笔头

Python标准库笔记(3) — datetime模块

目录[-] datetime模块提供了简单和复杂的方式用于操纵日期和时间的类。虽然支持日期和时间运算,但实现的重点是为了输出格式化和操作高效地提取属性。 ...

40260
来自专栏烂笔头

Python检查xpath和csspath表达式是否合法

目录[-] 在做一个可视化配置爬虫项目时,需要配置爬虫的用户自己输入xpath和csspath路径以提取数据或做浏览器操作。考虑到用户的有时会输入错误的x...

37290
来自专栏烂笔头

Python标准库(1) — itertools模块

目录[-] 简介 官方描述:Functional tools for creating and using iterators.即用于创建高效迭代器的函数。...

33260
来自专栏烂笔头

Pycharm创建virtualenv方法

目录[-] Python的版本众多,在加上适用不同版本的Python Package。这导致在同时进行几个项目时,对库的依赖存在很大的问题。这个时候就牵涉...

54150
来自专栏烂笔头

Python标准库笔记(2) — re模块

目录[-] re模块提供了一系列功能强大的正则表达式(regular expression)工具,它们允许你快速检查给定字符串是否与给定的模式匹配(matc...

39040
来自专栏烂笔头

Python魔术方法-Magic Method

目录[-] 介绍 在Python中,所有以“__”双下划线包起来的方法,都统称为“Magic Method”,例如类的初始化方法 __init__ ,Pyt...

37160
来自专栏烂笔头

Python正则表达式:最短匹配

目录[-] 最短匹配应用于:假如有一段文本,你只想匹配最短的可能,而不是最长。 例子 比如有一段html片段,<a>this is first label<...

50470

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励