sas基础教程(实用版)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在SAS系统中提供了大量的菜单操作,不过它灵活与强大的功能更体现在编程上,本书的实验全部是以程序完成的,所以这里对SAS的菜单操作系统不作介绍,想了解相关内容的读者可以参考其它相关SAS书籍。
在SAS程序中,对数据的分析处理可划分为两大步骤:
(1)将数据读入SAS系统建立的SAS数据集,称为数据步(DATA);
(2)调用SAS的模块处理和分析数据集中的数据,称为过程步(PROC)。
每一数据步都是以DATA语句开始,以RUN语句结束。而每一过程步则都是以PROC语句开始,以RUN语句结束。当有多个数据步或过程步时,由于后一个DATA或PROC语句可以起到前一步的RUN语句的作用,两步中间的RUN语句也就可以省略。但是最后一个的后面必须有RUN语句,否则不能运行。
SAS还规定,每个语句的后面都要用符号“;”作为这个语句结束的标志。
在编辑SAS程式时,一个语句可以写成多行,多个语句也可以写成一行,可以从一行的开头写起,也可以从一行的任一位置写起。每一行输入完成后,用ENTER键可以使光标移到下一行的开头处,和我们在Windows下进行Word文档编辑相似。
例如:data zhouhm;
input name $ sex$ math Chinese;
cards;
王家宝男82 98
李育萍女89 106
张春发男86 90
王刚男98 109
刘颍女80 110
彭亮男92 105
;
proc print data = zhouhm;
proc means data = zhouhm mean;
var math Chinese;
run;
绪2.1 data数据步简介
下面介绍SAS系统的data数据步的一般形式、常用语句以及几个常用的功能。
绪2.1.1建立SAS数据集
利用数据步建立SAS数据集,通常有两种方式可以输入数据:一是将数据排列在变量名串之后;二是通过外部数据文件直接读取。
通过程序录入数据的一般语法格式为:
DATA<数据集名>;
INPUT<变量名1>[$][D] <变量名2>[$][D] …<变量名k>[$][D];
CARDS;
S11 S12S1k
Sn1 Sn2Snk
;
RUN;
说明:
1)DATA语句指定要建立的SAS数据集名,通常也包括逻辑库名,如:Sasuser.zhouhm,把建立的数据集zhouhm存入逻辑库Sasuser中。如果句中省略逻辑库名,则表明建立的是一个临时库Work中的临时数据表。
2)INPUT语句将下面的数据录入并指定将其赋予给后面定义的每个变量。因此,在INPUT 语句中,必须给出有效的SAS变量名和变量类型。可用选项“$”表示该变量为字符型变量,默认则表示为数值型变量,用[D]来指定数据的宽度,用法可以参考后面具体的实验。
3)DATA、INPUT和CARDS三个关键词缺一不可,CARDS后面的是数据行。
4)如果CARDS后面的数据行有重复的域,可以在INPUT语句的末尾增加行停留符“@@”,起到自动换行的功能,以便接着读入后续的数据。
例如:
data zhouhm;
input number name $ @@;
cards;
200641001 zhang 200641002 wang 200641003 gun
200641004 zhu
;
run;
直接从外部数据文件中读取的一般语法为:
DATA<数据集名>;
INFILE’<文件名>’;
INPUT<变量名1><变量名2>…..<变量名k>;
RUN;
说明:这种方式中用INFILE语句指定了一个外部数据文件,所有需要输入的数据存放在该文件中,从而取代了上一种方式中的CARDS语句及其下列的一连串数据,当数据比较多的时候,用这一种方式可以使程序看上去显得比较简洁,具有一些优越性。这里INFILE语句位置在INPUT语句之前,而在上一种方式中,CARDS语句位置在INPUT语句之后,这些位置是不能随便更换的。
例如:
data zhouhm;
infile'd:\data\c2006.txt';
input name $ sex $ English Chinese;
run;
绪2.1.2 数据集的复制与修改
用SET语句可以把一个已有数据集复制到另一个新数据集,同时还进行修改。当然如果只是复制数据集,用管理器(SAS Explorer)菜单操作完成即可。SET语句的语法格式有两种,有些功能有重复。
格式一的语法形式为:
DATA<新数据集名>;
SET<数据集名>;
[KEPP<计划保留的变量名列表>;]
[DROP<计划丢弃的变量名列表>;]
[IF<条件>[THEN<语句>];]
RUN;
说明:1 )如果后面三个选项都不选,就是将数据集进行简单复制。比如要把临时数据集Work. zhouhm复制为永久逻辑库中的数据集Mylib.liuk,程序如下:
data mylib. liuk;
set zhouhm;
run;
这个程序中有一个隐含循环过程,SET是读取观测数据的语句,程序在数据步里面反复循环,直到数据集zhouhm最后一个观测数据被读过,循环才结束。SET语句也可以在复制过程的同时给数据集增加一个新的变量:
data zhouhm;
set zhouhm;
meanavg=math*0.4+Chinese/119*100*0.6;
run;
2)使用IF….THEN…语句可以在复制的同时对生成的数据集进行有条件的修改。比如可以把超过90分的语文成绩改为90分,程序如下:
data zhouhma;
set zhouhm;
if Chinese > 90then Chinese=90;
run;
3)使用KEEP语句可以指定要保留的变量。程序如下:
data zhouhmb;
set zhouhm;
keep name avg;
run;/*这样生成的数据集zhouhmb就只包含name和avg两个变量*/
4)使用DROP语句可以指定要丢弃的变量。如上例程序中的KEEP语句换成下面语句即可:
drop name math Chinese;/*用这种方法可以取出数据集的一部分列组成的数据集*/