SAS学习笔记9

1.SET
SET语句从一个或多个SAS数据集中读取观测值并实现纵向合并。每个SET语句被执行时,SAS就会读一个观测到PDV中。一个DATA步能够有多个SET语句,每一个SET语句又能够跟多个SAS数据集。多个SET语句含有多个数据指针,多个SET语句被执行时,SAS会按照自动变量_N_合并每一个SET语句后面全部数据集的观测到一个PDV中。
<1>IN=选项。
 IN选项,当读入多个SAS数据集时,用IN选项可肯定本观测来自哪一个数据集;
  variable=0表示观测不是来自本数据集
  variable=1表示观测是来自本数据集
例子:
data one;
input x y $ @@;
cards;
1 a 2 b 3 c 
;
data two;
input x z $ @@;
cards;
4 d 5 e
;
data in1;
set one(in=ina) two(in=inb);
in_one=ina;/*此处我本身的理解是这样的:前一行括号中的ina是本身定义的一个标识,表示对应的观测值在不在数据集中*/
in_two=inb;/*此时将ina和inb赋值给in_one和in_two并在数据集in1中显示*/
run;
数据集in1结果以下:
x     y      z      in_one       in_two
1     a               1            0
2     b               1            0
3     c               1            0
4            d        0            1
5            e        0            1
IN=是一个很是重要的SAS数据集选项,它能够把SET语句后面不一样的数据集经过标识变量显示出来。可是因为IN自己不是变量,所以不能直接经过赋值语句如in_one=in 获得标识变量,而只能先在PDV里面建立一个临时变量(该例是ina和inb),而后把临时变量的值赋给输出变量(该例对应的是in_one和in_two)。固然,不必定非要建立输出变量。如:

data in2;
set one(in=ina) two(in=inb);
if ina=1;then flag=1;else flag=0;
run;




数据集in2的结果以下:
x    y    z     flag
1    a            1
2    b            1
3    c            1
4         d       0
5         e       0




IN=选项的做用在于经过标识输入数据集,达到对不一样输入数据集执行不一样条件操做的目的。 java

<2>固然SET语句的选项还有好多,例如常常用到的选项是KEEP=,RENAME=,WHERE=,FIRSTOBS=,OBS=,NOBS=,POINT=,END=选项,可是这些都不是很难理解,只有上边的IN=选项费了我一点时间,我将个人理解和例子写上去了,但愿能够帮助到你。下边简单介绍一下后边的几个选项应用: 数组

KEEP=:指定的变量(组)进入到PDV,即最终数据集中保存下来的数据。 函数

RENAME=:重命名选项,知识须要对重命名变量用括号括起来。 spa

WHERE=:和SQL的where同样,条件筛选语句,只是要对表达式用括号括起来。 指针

FIRSTOBS=:读取数据集中的观测值开始位置。如:FIRSTOBS=3说明读取数据集的第三条观测做为开始观测。 code

OBS=:指定读取数据集中的观测值的结束位置。同上。 排序

NOBS=:对应的是数据集的观测数,即数据集中数据的总条数。 索引

POINT=:取指定的一条数据。(注意SAS中数组或者数据,开始的第一条是1而不是0)。 开发

END=:标识文件是都结尾。一般这样用:end=last_obs; input

2.BY

BY语句在过程当中通常用来指定一个或几个分组变量,根据这些分组变量值把观测分组,而后 对每一组观测分别进行本过程指定的分析。在使用带有BY语句的过程步以前通常先用SORT过 程对数据集排序。

3.MERGE
merge语句能够实现多表的横向合并。从功能实现的角度,若是是一对1、多对一或一对多的关联,merge语句和SQL基本上是同样的。可是对于多对多的关联,二者有很大的差异。在实际操做中,多对多的状况是须要用SQL实现的。
注意:
【1】对须要用到BY语句的merge,merge后面全部表在merge以前都须要排序。
【2】相对于SET语句,IN=选项在merge语句中应用更普遍。
【3】BY语句后面的变量必须是merge语句后面全部数据集共同变量,因此有时候须要对表中的变量重命名。
【4】在匹配合并中,若是merge后一个数据集出现空值,则空值也会覆盖前一个表的值。

4.KEEP
KEEP=选项保证在读入数据集时只有KEEP=后面的变量进入PDV,而数据集其余全部变量将不会进入PDV。
例子:
data a1;                                                          data a2;
set sashelp.class(keep=_character_);                           set sashelp.class(keep=_numeric_);
run;                                                              run;
此程序将保留数据集class全部字符型变量。                           此程序将保留数据集class全部数值型变量。


还能够用下边的形式,来建立多个数据集,保留不一样的变量:
data a3(keep=name) a4(keep=weight);
set sashelp.class;
...;
run;
此程序通过DATA步一系列操做以后,输出两个数据集:a3只有name变量;a4只有weight变量。

5.DROP
DROP语句是KEEP语句的反向声明语句,规定输出数据集中要删除的变量,同KEEP同样,对DATA步中正在建立的全部SAS数据集都适用。
DROP语句有以下两个重要的功能:
<1>读入数据集用DROP=选项效率高于DROP语句。
<2>既能够删除变量列表,也能够在输出数据集中删除不一样变量。

6.SORT
SORT对数据集中的观测排序。对数据集进行合并和更新等在使用前必须通过对BY变量进行排序。
<1>经常使用选项说明:
DATA=:规定被排序的数据集,默认为最新建立的数据集。
OUT=:建立输出数据集,省略该选项时用排序后的数据集替换原数据。
EQUALS;保持BY组内的排序。
NOEQUALS:容许BY组内顺序变化。
NODUPKEY:删除重复BY值对应的观测。
NODUPRECS:删除重复观测值。
FORCE:删除实施多余排序。排序并替换原来加索引或取子集的数据集;在没有规定OUT=选项时,在下列状况下应该使用FORCE选项:数据集有索引、使用了OBS=        和FIRSTOBS=选项、使用DATA=规定被排序数据集时使用了WHERE选项、PROC SORT中使用了WHERE选项。
BY:PROC SORT中必须使用BY语句,BY语句中能够指定一个或多个变量。默认时升序排序。可使用DESCENDING对变量进行降序排序,可是要注意DESCENDING必定
   要放在降序变量以前。
<2>在商业实践中,最经常使用的就是两个选项。OUT和NODUPKEY。注意几点:
【1】若是使用了NODUPKEY选项,最好使用OUT=选项。不然原有数据集会被 SORT后NODUPKEY删除掉一部分观测,万一程序开发有误,又要从新生成原来的数据集。而使用OUT=选项能够保证原来的数据集不变,把NODUPKEY后产生的观测输出到新的数据集中。
【2】若是有多个字符型变量须要SORT,则在SORT以前使用诸如CATT之类的字符拼接函数拼接全部须要SORT的字符变量,而且最好使用OUT=选项,以提升程序运行效率。
例子:

data a;
length cat $100;
input x1 $ x2 $ x3 $ y;
cat=catt(of x1-x3);
cards;
a1 b1 c1 1
a2 b2 c2 2
;
run;
proc sort data=a out=b;
by cat;
run;
7.SUMMARY PROC SUMMARY = PROC MEANS;
相关文章
相关标签/搜索