FLOWOVER/ MISSOVER/ TRUNCOVER/ S…

来源:互联网 发布:js遍历对象的所有属性 编辑:程序博客网 时间:2024/06/10 01:23

FLOWOVER/ MISSOVER/TRUNCOVER/ SCANOVER/STOPOVER 这5个含有over的选项之所以放在一起,是因为它们都用于读取记录末尾不完整的数据。
FLOWOVER是input默认的读取方式,缺省即是FLOWOVER,当前数据行所含数据个数相比变量个数不够时,SAS会从下一条记录继续读取。很多情况下,原始数据是按照行排好的,不够长度一般代表有部分数据缺失,这时自然不希望继续往下面读下一个数据行,所以就需要后面的这些选项进行处理。
MISSOVER如果记录行末尾没有足够的数据对应变量或者有不够列宽的数据对应变量,那从当前变量起,到变量列表中最后一个变量都置为缺失值;
TRUNCOVER跟MISSOVER不同的是如果末端的数据不够列宽则从这里截断,读取的部分数据被保留下来,当前变量之后的变量就会置为缺失值;
SCANOVER当前记录行找不到@'character-string'表达式指定的字符串时,继续往下面记录行进行查找,一直到找到为止。默认情况或者只有FLOWOVER选项的情况都是与指定SCANOVER等价的,也就是说SCANOVER与MISSOVER,STOPOVER一起使用才是有意义的。
STOPOVER当前记录行所含数据不够时,停止执行data步,置自动变量_ERROR_为1,将已经读写在数据集的打印出来。如果要创建的数据集已经存在,则中止创建数据集。
虽然解释完了,我想没有实例就空凭文字解释能把这几个over弄明白似乎有点难,而且这几个选项还特容易混淆。
帮助文件上有个例子很不错,但不一定每个人都会去看。
假设有一个文件'c:\over.txt'数据如下
55555
1
22
333
4444
55555
下面分别用上面这些选项读取这个文件
data test;
    infile 'c:\over.txt'*over;
    input testnum 5.;
run;

OBS

FLOWOVER

MISSOVER

TRUNCOVER

STOPOVER

1
2
3
4
5
6

55555
22
4444
55555
.
55555

55555
.
.
.
4444
55555

55555
1
22
333

55555

FLOWOVER与缺省所有*over选项等价,读取记录行第二行时,该行不够5个列宽,则从下一行开始读取,即22,然后下一行数据33不够5个列宽,于是再读取下一行4444;
MISSOVER 第2-4行记录都不够列宽,因此数据丢失;
TRUNCOVER 第2-4行记录都不够列宽,但是数据被保留下来;
STOPOVER 第二条记录不够列宽,所以被停止执行,而且LOG窗口中输出x=. _ERROR_=1_N_=1。如果数据集test已经存在,则除了在LOG窗口中输出错误信息外不产生任何动作,如果test不存在,则会创建一个test数据集,但是只有已经读取的第一条记录。
现在还有个问题,如果上面一些选项连用会怎么样?
FLOWOVER与MISSOVER或TRUNCOVER连用时,FLOWOVER被屏蔽,相当于没有FLOWOVER;
SCANOVER与MISSOVER或TRUNCOVER连用时,读取@'character-string'定位的数据以SCANOVER为准,而其他数据则以后者为准;
STOPOVER与其他连用则以STOPOVER

求助部分:(1)上面你的默认读入即FLOWOVER读入是怎样读入的读入后的)OBs代表什么意思?


0 0
原创粉丝点击