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;