洞察大数据价值:SAS编程与数据挖掘
上QQ阅读APP看书,第一时间看更新

4.2 数据步读DAT格式文件建立数据集

以扩展名“.dat”格式存储的外部文件,称为DAT格式文件。这种文件的读取要根据数据文件的记录数据方式而定,数据之间有分隔符和无分隔符在读取数据时的方式是不一样的。虽然SAS的图形化可以建立数据集,但它对需要用函数处理的数据变量却不能,所以真正经常用来处理数据文件的方式还是要通过编写SAS程序来完成。

4.2.1 DAT格式文件建立数据集

DAT格式文件和TXT文本文件性质一样,只是DAT格式文件实际开发中更经常遇到,这类文件存储的好处是二进制文件数据,它与TXT格式的区别在于TXT格式是字符文件。

1)数据之间没有分隔符的DAT格式文件,按行存储的每条记录之间无分隔符号,这类文件书写形式如图4-14所示。这类文件需要通过绝对指针来读取文件数据,绝对指针@n中的n为数据文件中列变量的开始位置,为正整数。

图4-14 数据之间无分隔符文件

【注意】文件中记录长度超过256字节要用LRECL=指定文件长度,否则数据文件读取会报错。

【例4.31】留学人员信息数据文件,数据存储列之间无分隔符文件,存储路径为“d:\sastest\yxy\yj.dat”,请把此文件读取出来,建立数据集abroad,并存储到“d:\sastest\yxy”目录下。

【程序解读】

程序通过dsd指定分隔符明显,missover指定缺失值不覆盖,外部文件记录长度超过256字节,必须用lrecl=选项指明记录长度。

2)实际应用中经常遇到DAT数据文件数据之间以某一分隔符号分隔,这类文件各列之间以分隔符号隔开,具体根据需求选择不同的分隔符号,分隔符号如“|”“@”“|@|”等,这类文件的书写形式如图4-15所示。

图4-15 数据之间以“|”分隔符分隔列数据文件

有分隔符号的数据文件和无分隔符号的数据文件在读取方式上是不同的,需要根据分隔符号读取。

【例4.32】邮政编码数据,数据之间以“|”符号分隔,文件存储路径为“d:\sastest\yxy\zone.dat”,请建立数据集zone,并存储到“d:\sastest\yxy”目录下。

【程序解读】

【例4.31】与【例4.32】两个实例对比可以看出无分隔符文件读取和有分隔符文件读取差异很大,读取的方式不一样,对比可以看出有分隔符文件不能用绝对指针@n方式读取文件,只能通过列变量名并定义变量数据类型的方式读取,并加入选项“dlm=”指明数据文件的数据分隔符号,同时加格式修饰符。

4.2.2 DAT格式文件特殊分隔符的处理

以特殊分隔符号来分隔外部数据文件的各列与上面讲的两类数据文件读取方式也不同。特殊分隔符号如“|@|”,这类分隔符要进行转换,因为操作系统在把这些分隔符读取时有和它一样的编码,这类文件书写形式如图4-16所示。

图4-16 数据之间以“|@|”分隔符分隔列数据文件

【例4.33】北京地区毕业生信息数据,数据文件中的数据之间以特殊分隔符号“|@|”分隔,文件存储路径为“d:\sastest\yxy\bjperson.dat”,请把此文件读取出来,建立数据集bjperson,并存储到“d:\sastest\yxy”目录下。

【注意】特殊分隔符文件读取时需要先对特殊分隔符进行处理,才能读取数据,此处用到了tranwrd函数转换特殊分隔符为另一分隔符。

【程序解读】

特殊符号“|@|”先通过函数tranwrd转换,以区别操作系统分隔符号,防止分隔符混淆。

说明:DATA步在读入数据时先把读入的行记录放到输入缓冲区,缓冲区中的数据可以赋值给SAS系统自带的内部变量_INFILE_中。

4.2.3 DAT格式文件特殊需求的字段处理

对于DAT格式的文件,在建立数据集时,为满足业务需求,一些特殊字段要通过在数据步使用SAS的内部函数来进行处理,这样生成的数据集才是符合业务需求的有效的数据集。为过程步进行统计分析或SAS/EM进行数据挖掘提供符合业务需求的正确的数据。

存储的文件字段中包含特殊符号,对这类文件的列变量,可以通过SAS内部的函数处理。这类文件的存储形式如图4-17所示,可以看到电话号码列数据“010#67565432”中区号和号码用“#”号分隔。现实中还有很多需要对文件的变量数据进行处理,但处理方式和思路都是一样的。

图4-17 列变量数据包含分隔符数据文件

【例4.34】通讯录数据文件,文件存储路径为“d:\sastest\yxy\phone.dat”,请把此文件中的电话号码列取出区号,其中电话号码区号与所取号码用“#”分隔,建立数据集名字为phone,并存储到“d:\sastest\yxy”目录下。

【程序解读】

phone变量中包含区号和电话号码,以“#”号分隔,通过scan函数取出区号。通过这个实例可以看出数据步里可以根据业务需求添加新的变量,通过SAS函数进行处理。无论是做统计分析,还是做数据挖掘,还是用SAS的其他模块对数据集进行处理分析,都需要数据步进行数据处理,数据步的核心地位在这里显示出来了,数据处理的优劣决定着分析结果是否有效。不合理的数据处理会影响分析,对于很重要的商业分析,错误分析产生的错误导向将会对商业活动造成可能无法估量的损失。