你可能有各种形式的数据,包括手写在纸上、存放在电脑上、或是在数据库管理系统里,不论如何,总有一种方法可以让SAS来读取。 SAS读取的数据的方法主要有以下几种类型: 直接输入; 从原始数据文件中创建一个SAS数据集(creating SAS data sets from raw data files); 将其他软件中的数据文件转换成SAS数据集; 直接读取其他软件的数据集; 直接输入 View table窗口可以让你以表格形式输入数据,可以定义变量、设置属性,如name、length和 type(character or numeric). SAS 企业向导模块 SAS/FSP 模块,是Full Screen Product的简称,可以设计定制的数据输入窗口,也有检测数据输入错误的功能(The SAS/FSP product is licensed separately from base SAS software.)。
从原始数据文件中创建一个SAS数据集 你有两种方法读取原始数据文件: 数据步可以读取任何形式的原始数据文件,比如text, ASCII, sequential, flat files。 导入向导(import Wizard)、导入过程(import procedure)适用于UNIX、OpenVMS和 Windows操作环境的简单方法,可以读取CSV(comma-separated values)和其他一些限定的文件类型。
将其他软件中的数据文件转换成SAS数据集 如果数据在一个软件中以某种格式存放,但需要用另一种软件分析时,就会很麻烦。有几种方法可以将某种软件中的数据转换成SAS数据集: 如果安装SAS/ACCESS模块,可以用导入过程(import procedure)和导入向导(import Wizard)将Excel、Lotus、dbase和Access文件导入SAS数据集。 如果没有安装,可以用存放数据的软件创建一个原始文件,并用数据步或导入过程(import procedure)读取。很多软件都可以创建CSV文件。 Windows操作环境下也可以用动态数据交换技术(Dynamic Data Exchange,DDE)。前提是必须有一个其他的Windows程序与SAS同时运行,再使用DDE和数据步。
直接读取其他软件的数据集 SAS/ACCESS产品可以不用转换数据格式读取数据,并适用于大部分数据库管理系统,包括ORACLE,DB2,INGRES和 SYbase(但使用方法本书没有介绍)。 使用Excel engine和Access engine来读取这两种类型的数据。(SAS帮助文档) 还有其他的一些数据引擎(data engines)来读取数据,如SPSS engine(附录D),查 使用DATA步,通过INFILE语句指定原始数据文件; SAS提供了以下3种基本输入方式:
列表输入
按列输入
格式化输入
1) FILENAME语句指定到单个文件的文件引用
2) FILENAME语句指定到一组外部文件存储位置的文件引用
3) 使用INFILE语句的选项DLM=指定分隔符
当原始数据中数据记录的数据值未使用空格,而是使用其他分隔符时,需在INFILE语句中使用DLM=选项,告诉SAS读入数据时需要使用的分隔符。
4) 使用INFILE语句的选项DSD
5) 使用INFILE语句的选项missover
MISSOVER:会在DATA步的本次迭代中阻止INPUT语句读入原始数据的下一条记录,并将PDV中所有未赋值的变量保持为缺失值(PDV中变量未赋值时就为缺失值)。当原始数据记录中的最后一个或多个字段没有值且没有占位符时,并且希望SAS将对应的变量置为缺失值时使用MISSOVER。
5) 使用INFILE语句的选项turnover
默认情况下(选项为FLOWOVER),当原始数据记录长度小于INPUT语句的预期时,INPUT语句自动读入下一条数据记录。当指定选项TRUNCOVER时,即使当前输入行数据的长度小于INPUT语句的预期,也会将当前输入行的数据赋值给当前处理的变量,并将其他没有赋值的变量设置为缺失值。
TRUNCOVER选项常用于处理变长的原始数据记录,可在INPUT语句中定义足够长度的变量,即使当前数据记录中的数据长度小于变量指定的长度,也可以将该记录从缓冲区读入PDV,并写入数据集,以便进一步处理。
5) 使用INFILE语句的选项PAD
选项LRECL为系统选项指定用于读写外部文件的默认逻辑记录长度。LRECL指定逻辑记录的长度为1(字节)或1024(k字节)的倍数。例如32表示32字节、16k表示16384字节。该选项的范围为1~32767。在SAS 9.4中,LRECL系统选项默认值为32767,通常不需要修改。
PAD和NOPAD选项控制SAS是否使用空格对从外部文件读入的记录进行填充,使其达到选项LRECL=指定的长度。默认设置为NOPAD。 当使用PAD选项时,SAS会自动用空格填充从外部文件中读入的记录长度。
6) 使用INFILE语句的选项控制输入
当原始数据记录中的数据值在每条记录中占据相同的列时,可使用按列输入的方式。按列输入(Column Input)可以读取固定列的数据。
上面介绍的按列输入与列表输入一样,只能读取标准的字符或数字值到数据集中。SAS还可以读取特殊格式的数字数据,例如二进制数据、日期/时间(01FEB2013),或者包含逗号(1,262)、货币符号($87.3)等特殊字符的数字值。在这种情况下,就需要使用格式化输入(formatted input)了,即在INPUT语句中提供特殊的指令,以便SAS正确地读取原始数据记录中的数据值。这些特殊指令称为输入格式(Informat)。格式化输入组合了按列输入特征和读取非标准化数字或字符值的能力,保证数据值可正确地从原始数据记录中读入。
将列表输入、输入格式和修饰符结合起来,结合后就成了带修饰的列表输入(modified list input),这样可以使用列表输入方式更灵活地读入数据。
·&修饰符(ampersand format modifier):使用列表输入时,该修改符能够读入数据值中包含一个或多个嵌入空格的字符值,并指定字符的输入格式。SAS读入数据直到遇到两个连续的空格或达到所定义的数据长度或输入行结束才停止。&修饰符解决了使用列表输入方式读取数据值中包含嵌入空格的问题,但要求该包含空格的数据值与下一个数据值之间至少间隔两个空格。
·:修饰符(colon format modifier):使用列表输入时,该修改符可以在变量名后指定输入格式。SAS读入数据直到遇到空列、达到所定义的数据长度(对字符型变量来说)或输入行结束才停止。:修饰符可以读取超过8个字节的字符数据和包含特殊字符的数字字符。
·~修饰符(tilde forat modifier):可以读入并保持数据值中的单引号、双引号和分隔符。
现在想要读取访问日期和访问的文件名,但是它们每行中所占据的列的位置都不同,而且文件名的长度每行都不一样,那么SAS读取这种文件通过如下方式:
在使用INPUT语句时不限于使用一种输入方式,可以在一条INPUT语句中混合使用这些输入方式,只要可以适当地描述原始数据记录就行。
跨行观测值的读取方式:
一般原始文件中一行代表一个观测值,有时会出现一个观测值跨行的情况。由于SAS会自动转到下一行读取数据,直到读取这个观测的所有变量(input语句中给出),所以你需要告诉SAS什么时候不要换行,以便在日志中不出现SAS-went-to-a-new-line的暂停说明,此时需要在INPUT语句中加行指示器。 行指示器,斜线/:告诉SAS跳至原始数据的第二行;#n:跳至第n行,n代表原始数据中某观测值的行数(#2则让SAS跳至某观测值的第二行),#n不能用来回跳。 例子 有一组关于温度的数据,temperature.dat第一行代表城市和州,第二行代表本日最高温和最低温,第三行代表史上最高温和最低温。
用如下的程度来读取这份数据: