infile指令使用总结 一、FIRSTOBS和OBS指令,FIRSTOBS用于指定读入数据的起始行;OBS用于指定读入数据的终止行。如 infile 'c:\temp.txt' FIRSTOBS=2 OBS=100; 二、FLOWOVER/MISSOVER/TRUNCOVER/STOPOVER 指令,该指令都用于读取记录末尾不完整的数据时使用,FLOWOVER是默认选项。看下面的几个例子sas的help也有这个例子 外部文件d:\test.log的数据为 1 22 333 4444 55555 分别用上面指令 data num; infile 'd:\test.log' FLOWOVER ; input temp 5.; RUN; 1 22 2 4444 3 55555 结果为,读取时第一条不知足长度5,移到下一行数据22读取数据(这是这行数据事实上被读入),指针天然移到第三行不知足,移到下一行数据4444读取数据(这是这行数据事实上被读入),指针移到第5行读取55555。 -------------- data num; infile 'd:\test.log' missover ; input temp 5.; proc print; RUN; 结果 1 . 2 . 3 . 4 . 5 55555 结果为,读取时第一条至第4条不知足长度5,写入默认值.,第五条知足读入。 ---------------- data num; infile 'd:\test.log' truncover ; input temp 5.; proc print; RUN; 结果 1 1 2 22 3 333 4 4444 5 55555 结果为,读取时第一条至第4条不知足长度5,可是将数据读入。 ---------------- data num; infile 'd:\test.log' stopover ; input temp 5.; proc print; RUN; 结果会出现错误,第一行不符合条件,就中止读入。事实上若是test.log第一行改成一个知足条件的数据77777,读取到第二行时因为不知足条件,sas就会中止读入。 结果是:若是数据集num已经存在,则除了在LOG窗口中输出错误信息外不产生任何动做,若是num不存在,则会建立一个test数据集,可是只有已经读取的第一条记录77777。 三、dsd(delimiter-sensitive data)指令,指定分隔符,默认为逗号(用delimiter='str'来指定分隔符)。该指令能够将分隔符之间的数据做为一个独立的数据项进行分隔,可是会忽略引号内的分隔符,也就是将引号内的数据做为一个总体来看。 data scores; infile datalines dsd; input Name : $9. Score Team : $25. Div $; datalines; Joseph,76,"Red Racers, Washington",AAA Mitchel,82,"Blue Bunnies, Richmond",AAA Sue Ellen,74,"Green Gazelles, Atlanta",AA ; proc print; run; 结果 1 Joseph 76 Red Racers, Washington AAA 2 Mitchel 82 Blue Bunnies, Richmond AAA 3 Sue Ellen 74 Green Gazelles, Atlanta AA 结果team变量里的Red Racers, Washington因为用引号包裹,做为一个总体读入,尽管中间有分隔符“,”。 --------------- data nums; infile datalines dsd delimiter='ab'; input X Y Z; datalines; 1aa2ab3 4b5bab6 7a8b9 ; 结果 1 1 . 2 2 4 5 . 3 7 8 9 结果是用a或者b来分割的,这个很重要 四、LINESIZE指令,指明读入记录的长度,最大为32767,默认为256。用于输入数据文件数据行大于 256时,防止超过长度的数据丢失。 infile datalines dsd ls=1024;