2.19临时和永久数据集
SAS临时数据集只在目前工作或会话中存在,关闭SAS或结束工作时则删除;永久数据集当关闭SAS或结束工作时仍然存在。
SAS数据集名所有的SAS数据集都有用句号分开的两层数据集名,如work.a。第一层前缀work是逻辑库名,第二层是在逻辑库中用于辨别自己的成员名。
名字的规则是,以字母或下划线开头,并且名字中只能包含字母、数字和下划线。而且,库名不能超过8个字节,而成员名却可以达到32个字节。大部分数据集通过数据步创建,过程步也可以创建。如果指定了一个前缀不为work的两层数据集名,则这个数据集就是永久的。如果不指定前缀,则默认数据集是临时的,自动分配到work逻辑库中。下面是一些数据集名,对于的逻辑库,成员名,类型:
临时数据集 如下的程序创建并打印了一个名为DISTANCE的永久数据集:
这里,只指定了成员名distance,自动分配到work库中,日志窗口中有说明:
NOTE:The data setWORK.DISTANCEhas 1 observati ons and 2 vari abl es.
永久数据集可以在资源管理器窗口中定义一个新库使用:
也可以通过如下程序:
那么日志窗口就会出现如下说明:
NOTE:The data setMYLIB.DISTANCEhas 1 observati ons and 2 vari abl es.
这是一个永久数据集,因为前缀不是work。
2.20 用LIBNAME语句使用永久数据集
LIBNAME语句的基本形式为:LIBNAME libref’your-SAS-data-library’;
LIBNAME的后面,需要指定库名和存放的路径,在个人操作环境下LIBNAME语句的基本形
式为:
创建永久数据集如下的例子创建了一个永久SAS数据集,包含了magnolia trees的一些信息。每一种树,原始文件都包含它的科学名、普通名、最大高度、第一次开花的年龄、是evergreen还是deciduous、以及花的颜色。
下面的代码将会创建一个PLANTS的逻辑库,路径为C盘下的MySASLib。然后从原始文件Mag.dat中读取数据,并创建一个名为MAGNOLIA的永久数据集,存在PLANTS库中。
日志窗口会出现如下说明:
NOTE:The data setPLANTS.MAGNOLIAhas 5 observati ons and 6 vari abl es.
如果在电脑中打印文件的地址目录,会发现文件名不是PLANTS.MAGNOLIA。这是因为操作系统有自己对文件命名的方式,这个文件,在Windows,UNIX,和OpenVMS操作环境中名字为magnolia.sas7bdat,在OS/390或者z/OS环境中,文件名就会如LIBNAME语句中定义的data-set-name形式。
读取永久数据集如果你想打印出上例中创建的数据集,可以用如下语句:
这次LIBNAME语句中的库名为example,但缺失同样路径,逻辑库名可以改变,但成员名MAGNOLIA却一样。输出如下:
2.21通过直接指代使用永久数据集
可以通过直接指代来使用SAS数据集,且不需要自己定义,SAS为你做好。
直接指代,依据系统不同,使用方法也不同,如下:
可以看到,一些系统的语句中需要指出路径,但如果遗漏了路径,SAS自动使用当前路径,比如这样一个创建名为trees的永久数据集的代码:
DATA ‘trees ’;
UNIX和OPENVMS操作环境下,当前的路径默认为启动SAS的路径,可以通过工具(TOOLS)下拉菜单的选项(OPTIOPN)菜单来改变这种默认,windows环境下当前路径会显示在SAS窗口底部。可以通过双击这个路径来改变默认。
例子如下还是关于magnolia trees的这个例子,
下面的代码将从原始文件mag.dat中读取数据,创建一个名为MAGNOLIA的永久数据集,存放在C盘的Mysaslib路径中:
相应的输出窗口显示如下:
NOTE:The data set c:\MySASLi b\magnol i a has 5 observati ons and 6 vari abl es.
如果打开MySASLib文件夹,会发现一个名为magnolia.sas7bdat的文件。在没指定库的情况下,SAS会自动为你创建一个库,在资源管理器窗口中可以看到,下图是SAS为magnolia创建的库。
用直接指代读取SAS数据集 可以直接用引号+路径的方式读取永久数据集,比如打印magnolia数据集可以:
2.22列出SAS数据集目录
由于SAS是自文档化,即在自动储存了数据集的信息,因此可以通过contents过程来查看SAS数据集的描述。
Proc contents data=data -set
如果遗漏了data=的语句,SAS自动列出最近创建的数据集
例子 如下的程序创建了一个数据集,并且使用proc contents。数据步中使用了label语句,label语句为变量打上标签,并储存在数据集中,在打印时会显示。过程步中也可以使用label,但只在proc contents中有效,不会储存在数据集中。Informat和format可以指定信息和格式,储存在数据集中,也可以在过程步中使用,但不储存在数据集中。
输出如下: