SAS 程序包含两类程序步:DATA 步和 PROC 步。这两类程序步构成了所有 SAS 程序,它们既可以单独使用也可以结合使用。
DATA 步通常用于创建或修改 SAS 数据集,但也可用来生成定制报表。例如,可以使用 DATA 步执行以下任务:
-
将数据放入 SAS 数据集
-
计算新变量的值
-
检查并更正数据中的错误
-
通过对现有数据集取子集、合并和更新来生成新的 SAS 数据集
PROC 步通常用来分析和处理 SAS 数据集形式的数据,有时还可创建包含过程结果的 SAS 数据集。PROC 步控制预编写例程(过程)的逻辑库,其中的例程用于对 SAS 数据集执行数据列表、排序和汇总等任务。例如,可以使用 PROC 步执行以下任务:
- 列显报表
- 生成描述性统计量
- 创建表格式报表
- 生成点/线图和图表
SAS 程序特征
接下来让我们逐一查看示例程序中的各个语句。SAS 程序由 SAS 语句构成,该语句具有两个重要特征:
- 通常以 SAS 关键字开头
- 始终以分号结束
DATA 步以关键字 DATA 开头,PROC 步以关键字 PROC 开头。通常,RUN 语句或新的 DATA 或 PROC 步的开始即标志着某一程序步的结束。RUN 语句用于向 SAS 说明要处理当前程序步中该语句之前的所有行。
SAS 语句不区分大小写。可使用空格或特殊字符分隔 SAS 语句中的“单词”。 |
options nodate;
date test;
set mylib.productsales;
run;
proc print data=test label noobs;
title "产品销售" ;
run;
- 要删除每页顶部的日期,可使用 NODATE 系统选项。请复制下面的 OPTIONS 语句,并将其粘贴到程序的顶部:
options nodate;
- 要替换默认标题,可使用 TITLE 语句。请复制下面的行,将其添加到 PRINT 过程的 RUN 语句之上:
title "Product Sales Report";
通过在 PROC 步中引用 TITLE 语句,该标题便可应用到过程输出中。
- 要删除 Obs 列并使用列标签,可使用 PROC PRINT 语句中的选项。更改 PROC PRINT 语句,向其添加 LABEL 和 NOOBS 选项。PROC PRINT 语句应如下显示:
proc print data=test label noobs;
创建 HTML 输出 您已经了解了在“输出”窗口中可以创建 SAS 列表输出,不过,您还可以设置参数选择创建 HTML 输出,您的参数选择将存储在不同的会话中。
- 选择工具 选项参数选择。
- 点击结果选项卡。
- 选中创建 HTML 复选框。
- 确定。
四、由外部文件转化为SAS数据集
data datasetname;
infile 'filename' options;
input 变量名;
如D盘test.dat则为
data dal;
infile 'd:\test.dat';
input x1-x4;
sum=x1+x2+x3+x4;
run;
五、通过已经存在的SAS数据集创建新的SAS数据集
从数据集EX创建数据集EX1data ex1;
set ex;
将两个数据集d1和d2中的观测值纵向连接起来建立新的数据集d3,可编辑语句:
data d3;
set d1 d2;
六、SAS数据库
所处理的数据文件必须放在SAS数据库中。所谓SAS数据库是指一个或几个SAS文件集合。
指定库名
libname 库名"文件夹的位置";
临时库只有一个,名为work,其中的文件退出SAS后会被自动删除。
七、sas语法基础
1、SAS常量
- 数值常量
- 字符常量 "Hello" 'zhangli'
- 日期、时间、日期时间常量:后接D,T,DT如
- '1JAN2000'D '9:25:19'T '1JAN2000:10:30:05'DT
七、常用语句
1、cards语句
cards语句的作用是与“;”呼应,标志数据行的开始与结束。
格式为
CARDS;
数据行
;
使用CARDS语句,后面必须紧跟数据行,并且在一个数据步中最多只能有一个CARDS语句。
2、input语句
INPUT语句作用是描述输入记录中的数据,并把输入值赋给相应的变量。其格式为
INPUT 数据的变量名、数据及类型;
默认读入的是数值型变量的值,除非在INPUT变量名后有串符号,或用字符的输入格式表示,或该变量事先已被定义为字符串。
INPUT采取列表输入的方法,各个变量的值由空格分隔,为从一行读取多个观测值(每一行称为一个观测,每一列称为一个变量),应使用行保持符@@限制读取数指针,使其保持在这一行上读数,直到数据读完为止。例如下面将读取3行
input X Y @@;
cards;
3.16 2.9 5.8 3 4.9 4.17
3、merge 将两个数据集中的各个观测值横向合并并建立新的数据集
data d3;
merge d1 d2;
编程实例
data d1; input a b c @@; cards; 1 5 7 1 7 9 1 3 4 1 2 6 ; data d2; input X Y Z @@; cards; 2 4 8 2 6 6 ; data d3; merge d1 d2; proc print; run;
4、DROP语句
DROP 语句的作用是指定不写到数据集中的变量
DROP 变量名表;
编程实例
data d1; input a b c @@; cards;
1 5 7 1 7 9 1 3 4 1 2 6 ; data d2; input X Y Z @@; cards;
2 4 8 2 6 6 ; data d3; merge d1 d2; proc print; run;
5、KEEP语句
与drop正好相反,在DATA步中,出现在KEEP的保留,其他删除
data chengji; input name$ chineses maths @@ ; keep name total; total=chineses+maths; cards; a 82 78 b 90 78 c 79 86 ; proc print; run;
6、DATA步中,if语句,真继续处理否则返回到DATA步开始,不处理当前的观测值,不执行DATA步中的语句。
编程实例:
data chengji; input name$ chineses maths @@ ; total=chineses+maths; if total>=162 then output; else put 'total<162'; cards; a 82 78 b 90 78 c 79 86 ; proc print; run;
7、PROC语句
作用是指定需要调用的过程及该过程的若干选项、
PROC 过程名;
例如,调用PRINT过程,打印数据集EX的内容:
PROC PRINT DATA=EX;
在PROC步中,必须确认一些最基本的信息,包括:
- 处理的数据集名,格式为DATA数据集名.
- 所涉及的变量名,格式为VAR名.
- 分组处理的标志,格式为BY组变量名.
8、CLASS语句
CLASS的作用是在分析的过程中定义分类变量,再按分类变量的值分别进行数据分析。其格式为
CLASS 变量名;
CLASS语句对数据分析所起的作用类似BY语句,但是它们打印输出的格式不相同,并且BY语句要求先对变量排序后才能使用。
9、FREQ语句
FREQ 语句的作用是规定一个变量,以它的值作为数据集中观测值出现的频数(frequence)。
FREQ语句的格式:
FREQ 变量;
假定某观测值的FREQ变量的值为n,在分析时,该数据集中这个观测值出现的频数便是n.若n<1,则观测值不参加分析.若n不是整数,则自动取整。观测值的总数等于FREQ变量的和。
编程实例
data student; input x y @@; cards; 8 9 3 8 5 3 7 9 9 ; proc means; freq y; run;
y值为频率
SAS中的一些基本服务过程
1print
PROC PRINT[选择项];
VAR 变量表;
BY 变量表;
SUM 变量表;
选择项可能有DATA=数据集名
SUM语句被用来求变量表中诸变量的总和.
2、sort过程
PROC SORT[选择项];
BY 变量表;
选择项可能为:
①DATA=数据集名
用来说明要排序的数据集名,如果省略这一选择,则指定最新建立的数据集.
②OUT=数据集名
用来说明要输出的数据集名,如果省略这一选择,则原来的数据集被输出的数据集替换。
data ex;length name$9 input name sex$ group$ t1-t3 @@; s=sum(of t1-t3) cards wangdong 1 1 90 70 60 xueping 2 2 85 95 88 zhouhua 1 1 77 84 69 heyan 1 2 95 78 88 sunhong 2 3 89 97 87 zhaobin 2 3 66 98 86 huangshan 2 3 67 75 76 hufang 1 2 78 77 69 lili 2 2 70 82 63 zhaoli 2 3 95 90 91 zhangqun 1 1 93 91 89 iping 1 3 59 88 93 liyun 1 1 89 96 76 liyu 2 1 79 89 87 huajin 2 2 89 97 80 ; proc sort; by group sproc print; by group; run;
这里是按s升值进行排序,若要降序,需在s前加DESCENDING
3、FORMAT过程
PROC FORMAT;
VALUE 格式名 格式的定义;
为便于识别,格式名通常是原变量名加FMT,如果原变量是字符串,则应当在格式名前加串符号。后面的过程中,如果涉及某变量的输出格式,必须有语句:
FORMAT 变量名 格式名;
data ex;length name$9; input name sex$ group$ t1-t3 @@; s=sum(of t1-t3); cards; wangdong 1 1 90 70 60 xueping 2 2 85 95 88 zhouhua 1 1 77 84 69 heyan 1 2 95 78 88 sunhong 2 3 89 97 87 zhaobin 2 3 66 98 86 huangshan 2 3 67 75 76 hufang 1 2 78 77 69 lili 2 2 70 82 63 zhaoli 2 3 95 90 91 zhangqun 1 1 93 91 89 iping 1 3 59 88 93 liyun 1 1 89 96 76 liyu 2 1 79 89 87huajin 2 2 89 97 80 ; proc format; value $sexfmt'1'='m' '2'='f'; value $groupfmt'1'='a' '2'='b' '3'='c'; value t1fmt 0-<60='C'-<80='B'80-100='A'; proc print; format sex $sexfmt.; format group $groupfmt.; format t1 t1fmt; format t2 t3 4.1;run;
4、STANDARD过程
PROC STANDARD[选择项];
VAR 变量表;
FREQ 变量表;
BY 变量表;
5、TRANSPOSE过程
PROC STANDARD[选择项];
VAR 变量表;
BY 变量表;
- 选择工具 选项参数选择。