最近項(xiàng)目的一個(gè)Raw Data的為txt的文本格式砾层,首行為變量名,變量以及變量值以Tab間隔。
直接使用import
過(guò)程步將數(shù)據(jù)導(dǎo)入SAS數(shù)據(jù)集瑰抵,遇到了問(wèn)題:數(shù)據(jù)可以正常導(dǎo)入,但是Log會(huì)出現(xiàn)Warning和Error器联。
proc import datafile = "xxx.txt" out = rawdata replace dbms = tab;
delimiter = " ";
run;
具體是什么原因造成的呢二汛?在導(dǎo)入過(guò)程中婿崭,一些原始變量被識(shí)別成數(shù)值變量,但是變量有一些記錄為字符“NA”肴颊。這些字符記錄導(dǎo)入數(shù)據(jù)集中顯示為缺失氓栈,同時(shí)也造成Log Issue。
為什么有字符“NA”的變量會(huì)識(shí)別成數(shù)值變量呢婿着?這是因?yàn)镾AS import的機(jī)制是先掃描文件靠前的記錄授瘦,以確定變量的數(shù)據(jù)類型以及對(duì)應(yīng)的長(zhǎng)度,默認(rèn)是掃描前20行祟身。
這就解釋了上面Log Issue的產(chǎn)生的原因:某些變量的前20條記錄為數(shù)值奥务,SAS掃描記錄判斷該變量為數(shù)值變量,后續(xù)讀入時(shí)遇到字符記錄就觸發(fā)Log Issue袜硫。
如何解決這個(gè)問(wèn)題呢氯葬?通過(guò)Guessingrows=
選項(xiàng)指定一個(gè)比較大的掃描行數(shù),這樣就可以覆蓋變量取值的所有可能性婉陷,將靠后記錄為字符的變量識(shí)別成字符變量帚称。
proc import datafile = "xxx.txt" out = rawdata replace dbms = tab;
delimiter = " ";
guessingrows = max;
run;
Guessingrows=
選項(xiàng)除了可以指定行數(shù)外,還可以直接指定“MAX”秽澳。不過(guò)闯睹,指定最大值可能對(duì)性能造成影響。
感謝閱讀担神, 歡迎關(guān)注:SAS茶談楼吃!
若有疑問(wèn),歡迎評(píng)論交流妄讯!