《SAS统计分析从入门到精通》第一章笔记1.1-1.3
第一章 数据预处理
1.1 SAS操作界面
- 菜单栏中的“解决方案”菜单利用SAS进行数据分析、程序开发的最主要的菜单。
该菜单下的“Analysis(分析)”二级菜单涵盖了绝大多数功能和模块。
该菜单下的"ASSIST和Desktop(桌面)“两种图形界面(GUI)。
用户可单击GUI上的图标进入对应的分析功能和模块。
- Explorer(浏览):窗口类似于Windows系统下的资源管理器,可以实现对SAS数据库、数据文件、程序及其他文件的查看、打开、新建、删除等基本操作,甚至可以直接运行SAS系统外的其他软件。
- Results(结果):窗口可以以目录或者条目的形式提供分析结果的浏览功能。
- Output(输出):窗口主要呈现利用SAS系统进行分析的结果。——F7
- Log(日志):用户对SAS的每一步操作都会以日志形式列示在窗口中。同时,在进行数据分析的过程中,一些出错信息和程序执行的反馈信息也会出现在该窗口。——F6
- Editor(编辑器):用户可在该窗口进行编程或输入文字信息。——F5
打开这些默认窗口的方式:1.在命令框中输入对应窗口的名字。
2.在“视图”菜单单击对应窗口的名字。
1.2 SAS编程基础
1.2.1 SAS编程语言的基本结构
- SAS主要由两个步骤:DATA Step(简称DATA/数据步)和PROC Step(简称PROC/过程步)。
- 程序中的每一行以“;”表示输入结束。
- 其语句语法包括关键字、运算符号、函数、及其参数等基本要素。
title"..."; /*设置标题*/
libname...; /*定义永久数据库*/
data...; /*DATA步*/
...;
...;
run;
proc...; /*PROC步*/
run;
1.DATA步
主要功能:建立SAS数据集,导入外部程序数据文件、分割、合并、修改、更新现有的SAS数据集,分析、呈现和管理数据,利用数据集中已有的数据计算或生成新变量等。DATA步常用的SAS编程语句如下。
- infile语句:从外部文件获取数据。使用该语句必须把其放在其他DATA语句之前,主要语法如下:
infile“外部数据路径及文件名“<选项>;
如从D:\student.txt文件中获取数据,可利用以下infile语句。
infile"D:\student.txt";
- input语句:指定读入数据的格式以及为读入的数据指定变量名及格式,语法如下:
input<变量名1 变量名2 … 变量名n><选项>
如从读入的外部数据中读入height、weight两个变量。
input height weight;
- cards语句:用于在SAS系统中直接输入数据,表明所列示数据的开始。
2.PROC步
主要功能:可引用现有的程序或过程进行相应的数据处理和分析活动。其主要语法如下。
proc 过程名<data=数据库名.数据集名><选项>;
<var<变量名1 变量名2 ... 变量名n>>;
<where <条件或条件表达式>>;
<by <变量名1 变量名2 ... 变量名n>>;
run;
其中的语句主要功能如下:
- data语句表示该PROC步处理的数据集。
- var语句表示处理数据集中的特定变量。
- where语句表示指定系统处理符合一定条件或表达式的样本。
- by语句表示指定系统按照所列示的变量进行分组处理。用该语句时,必须先对该语句中指定的分类变量进行排序。
3.SAS编程语言的表达式
SAS的常用表达式:运算表达式和逻辑表达式。
SAS的运算符主要有:+、-、*、/(除)、**(乘方);
SAS的逻辑符号主要有:=、<、>、<=、>=、<>(不等于)、and(和)、or(或)、xor(异或)。
这些符号也可以用英文字母等价表示:
符号 | = | < | > | <= | >= | <> |
英文 | eq | it | gt | le | gt | ne |
1.2.2 SAS结构化编程语言
SAS的结构化编程语言主要有顺序语句、条件语句和循环语句。顺序语句是最常见的语句形式,系统按照语句自身顺序进行解释形式的执行。
1.条件语句
语法如下:
if 条件表达式 then
...; /*当条件或表达式满足时执行的程序*/
else
...; /*当条件或表达式不满足时执行的程序*/
2.循环语句
主要有DO(计数)循环,WHILE(当)循环,UNTIL(直到循环)3种形式。
- 计数循环:
do 计数变量=初始值 to 终止值 by 步长;
...;
end;
如果by步长省略,则表示计数变量按照默认步长1计数。步长也可以是负数,此时计数变量初始值需大于终止值。
- 当循环:
do while;(继续循环条件表达式)
...;
end;
该语句执行时会首先判断条件表达式是否成立。如果成立,则系统执行DO WHILE中的语句,遇到END时返回条件表达式的判断。如此重复,直到条件表达式不能够满足为止。
- 直到循环:
do until;(退出循环条件表达式)
...;
end;
该语句会首先执行循环语句内部的程序,然后判断条件是否成立。如果成立,则退出循环过程,否则继续执行循环内部的程序。
1.3 SAS数据的处理对象
1.3.1 SAS数据库和SAS数据集
SAS的数据对象是存在于SAS数据库中的数据集。数据集是SAS的数据处理对象,同时也是数据分析的基础。
1.SAS数据库
SAS数据库具体是指存放SAS数据文件(即数据集)的文件夹。
(1)SAS数据库的分类
根据数据处理的时效性不同,SAS数据库可分为临时库和永久库。
- 临时库:只有一个,WORK。启动时SAS系统自动生成,关闭时数据库中的所有数据文件自动被清除。
- 永久库:可有多个,用户可以自己指定永久库的库的标记。
(2)SAS永久数据库的建立
- 通过菜单操作方式制定
- 利用编程方式制定
LIBNAME 库标记<.路径<,数据引擎<,数据引擎的选项>>>
如:建立一个名为“test”的永久数据库该数据库对应的文件夹绝对路径为“D:\Statistics\SAS\SAS 9.1”
LIBNAME test"D:\Statistics\SAS\SAS 9.1";
(3)清除指定的数据库
清除一个具体的数据库时,只是清除其在SAS系统中先前指定的逻辑库名,并不会清除计算机储存器上对应的物理文件夹。
LIBNAME test;
2.SAS数据集
SAS数据集具体是指存放在SAS数据库中的数据文件,是用SAS进行数据分析的基本对象,它与某一个具体的文件相对应。
(1)SAS数据集的分类
- 临时数据集:存放在临时数据库(WORK数据库)中的数据文件,关闭SAS,临时数据集会被自动清除。
- 永久数据集:存放在永久数据库中的数据文件。
(2)SAS数据集的调用
- 每个数据集都有一个二级名字。第一级是库标记,第二级是数据集名。一般形式为:库标记.数据集名。
- 调用永久数据库中的数据集时,应当指定该数据集对应的库标记。而调用临时数据库中的库标记时,则可以省略库标记,直接引用即可。
如,引用Sample永久库中名为“ABC”的数据集:Sample.ABC。
引用WORK数据库中名为“ABC”的数据集:WORK.ABC或ABC。
- SAS数据集的内容包含变量及其对应的数据,即样本观测值。
3.SAS变量的类型
基本类型:数值型和字符型。
整数、实数、浮点数、科学计数、表达日期或时间的变量都被储存为数值型数据,默认长度为8字节。
汉字、字母、符号等储存为字符型数据,默认长度也为8字节。
实际数据中遇到的缺失值,SAS系统通常用“.”表示。
4.利用SAS编程建立数据集
在已有数据库中建立数据集时,主要使用SAS语言中的DATA步中的INPUT函数和CARDS选项。DATA步用于指定数据集的名字,INPUT函数的主要作用是指定变量及变量的属性,并为对应的变量输入指定的输入方式,其主要语法如下。
INPUT <变量名1 变量名2 ... 变量名n><@@>;
CARD选项则列示了所有变量对应的数据,可以为INPUT指定的变量读入数据,一直读到“;”为止。下面在永久数据库Myljk中建立名为“score”的数据集。
data myljk.score; /*在mylik中建立名为“score”的数据集*/
input id liternature math @@ ; /*定义数据集中的变量和数据读入方式*/
label id="学号" liternature="语文" math="数学" ; /*定义数据集中变量的标签*/
cards;
1 89 87 2 78 90 3 79 89 4 90 76 5 95 87
6 87 89 7 89 69 8 69 88 9 75 78 10 70 92
;
结果:
- LABEL语句可以为变量名设置标签。
- INPUT语句中的”@@“表示按照INPUT定义的变量顺序依次连续输入数据,无论数据分为多少行,遇到“;”则停止数据读入。如果没有”@@“符号,则表示系统按照行读入数据,如上例中系统首先按照INPUT指定的顺序读入第一行中的1、89、87,接下来读入2、78、90,接着跳至第3行,第三行为“;”故停止读入。
- 还可以用INPUT语句读入字符型变量,这时需要在INPUT语句中指定的字符名后加上“$”符号。如在上例中增加字符型变量“name”,其标签为“姓名”。
data myljk.score; /*在mylik中建立名为“score”的数据集*/
input id name$ liternature math @@ ; /*定义数据集中的变量和数据读入方式*/
label id="学号" name="姓名" liternature="语文" math="数学" ; /*定义数据集中变量的标签*/
cards;
1 张三 89 87 2 李四 78 90 3 王五 79 89 4 赵二 90 76 5 孙玉 95 87
6 张一 87 89 7 李五 89 69 8 黄源 69 88 9 陈强 75 78 10 钱刚 70 92
;
结果:
此外,在已有数据集的情况下,也可以利用SET语句对数据集进行复制。如根据Myljk.score数据集复制新的Work.score数据集,程序如下:
data score;
set Myljk.score;
run;
1.3.2 SAS数据系统的外部数据文件
对于在其他非SAS系统环境(如Excel、Access、Lotus等)中建立的数据文件,SAS可以通过数据导入功能把其转换为SAS数据集。
1.利用SAS/Import Data(导入数据)菜单进行数据的导入
File(文件)->Import Data(导入数据)
例如:现有我国20世纪80年代的居民消费和人均GDP的数据,统计分析人员利用Excel 2003进入数据录入,建立了名为"MacroEconomy.xls"的Excel工作簿。该工作簿中一共有3个工作表,分别是Economy、Sheet2、Sheet3,其中所有数据储存在Economy中。要求把该文件中的变量及其对应的数据导入至SAS系统的Myljk数据库中,并建立名为“Percapitadata”的数据集。
2.利用SAS程序进行数据导入
用IMPORT语句向Myljk数据库中导入“E:\”路径下"MacroEconomy.xls"工作簿中的Economy工作表的数据,并命名为“Percapitadata”数据集,程序如下:
proc import datafile="E:\MacroEconomy.xls" /*指定外部数据文件路径及文件名*/
out=Myljk.PERCAPITADATA; /*指定导入的数据库和数据集名*/
sheet='Economy';
run;