一、sheet名字過長的問題
當我們用proc import導入一個excel文檔的時候,經(jīng)常會出現(xiàn)這樣的情況:

這是因為excel的sheet名字過長導致的(有時候DM老是把sheet名字弄的老長,還后面綴這日期,搞得每次更新文件都先改程序)。
這種情況下最簡單的處理就是手動修改excel的sheet名字,但是一般作為正式項目,作為外部數(shù)據(jù)的excel是不好隨便改的。
既然不能改文件就只能改程序了,這里提供一個新的方法:

這兩段程序到底哪里有不同呢?最主要的是dbms=的值不同,前者填寫的是excel,后者填寫的是xlsx。需要注意的是填寫xlsx后,原來的兩個參數(shù)就不能用了需要刪掉。
二、全部導入成字符型
有的時候excel文檔是很討厭的,比如原來數(shù)據(jù)是1.20,當轉成SAS的時候,程序會“貼心”的把變量轉成數(shù)值型,從而丟掉了1.20后面的0。這本來不影響分析,但是ORRES是要收集原始值的,人家填的是1.20,你怎么能寫1.2呢?這個時候就需要我們強制把excel所有變量都變成字符型。
其實這是個偷懶的小技巧。我們只需要修改getnames=這個參數(shù)為no,這樣excel第一行就會被當作變量的值而不是變量名或標題了。而excel的第一行一般來說,都是含有字符的,所以這樣會讓所有變量都被當作字符型處理。
當然,我們還可以直接修改excel,在excel中就直接把所有變量都定義為字符的,但是這樣又犯了改原始數(shù)據(jù)的忌諱總之不推薦。
最后需要注意的是,mixed選項是很重要的,如果是no的話,一列中如果有純數(shù)字的話很容易被判定為數(shù)值型,從而把那些有字符的變量置空。加了mixed=yes以后,一列中如果既有數(shù)字又有字符,就會被判定為字符型。但如果一列真的是純數(shù)字,則會被判定為數(shù)值型。另外,對于日期格式,如果沒有mixed話,會把日期導成date格式的數(shù)值型,但使用mixed之后,日期也會被當作字符處理。
三、導入字符的長度問題
如果dbms=excel的話,導入的字符變量最大長度默認是1024,再長會截斷。但是如果加入語句textsize=32767;可以設定這個長度。但是如果dbms=xlsx的話,就不會出這個問題。
網(wǎng)上說scantext是可以自動掃描變量的最大寬度的,但是實際操作下來似乎并非如此,具體有什么作用還不知道。
四、預讀觀測問題
盡管使用了textsize=32767;,有些變量還是會被截斷。這是因為SAS在讀入的時候,是預先檢查excel前面的若干行來判斷長度和變量類型的,所以如果特別長的值在最后幾行,可能會導致沒有檢查到改行,從而變量長度比值要短,以至于發(fā)生了截斷。這種情況就要用dbms=xlsx了。