一樱报、sheet名字過長的問題
當(dāng)我們用proc import導(dǎo)入一個(gè)excel文檔的時(shí)候沪编,經(jīng)常會(huì)出現(xiàn)這樣的情況:
這是因?yàn)閑xcel的sheet名字過長導(dǎo)致的(有時(shí)候DM老是把sheet名字弄的老長辨赐,還后面綴這日期逻翁,搞得每次更新文件都先改程序)龙填。
這種情況下最簡單的處理就是手動(dòng)修改excel的sheet名字失仁,但是一般作為正式項(xiàng)目尸曼,作為外部數(shù)據(jù)的excel是不好隨便改的。
既然不能改文件就只能改程序了萄焦,這里提供一個(gè)新的方法:
這兩段程序到底哪里有不同呢?最主要的是dbms=的值不同拂封,前者填寫的是excel茬射,后者填寫的是xlsx。需要注意的是填寫xlsx后冒签,原來的兩個(gè)參數(shù)就不能用了需要?jiǎng)h掉在抛。
二、全部導(dǎo)入成字符型
有的時(shí)候excel文檔是很討厭的萧恕,比如原來數(shù)據(jù)是1.20刚梭,當(dāng)轉(zhuǎn)成SAS的時(shí)候,程序會(huì)“貼心”的把變量轉(zhuǎn)成數(shù)值型票唆,從而丟掉了1.20后面的0朴读。這本來不影響分析,但是ORRES是要收集原始值的惰说,人家填的是1.20磨德,你怎么能寫1.2呢?這個(gè)時(shí)候就需要我們強(qiáng)制把excel所有變量都變成字符型。
其實(shí)這是個(gè)偷懶的小技巧典挑。我們只需要修改getnames=這個(gè)參數(shù)為no酥宴,這樣excel第一行就會(huì)被當(dāng)作變量的值而不是變量名或標(biāo)題了。而excel的第一行一般來說您觉,都是含有字符的拙寡,所以這樣會(huì)讓所有變量都被當(dāng)作字符型處理。
當(dāng)然琳水,我們還可以直接修改excel肆糕,在excel中就直接把所有變量都定義為字符的,但是這樣又犯了改原始數(shù)據(jù)的忌諱總之不推薦在孝。
最后需要注意的是诚啃,mixed選項(xiàng)是很重要的,如果是no的話私沮,一列中如果有純數(shù)字的話很容易被判定為數(shù)值型始赎,從而把那些有字符的變量置空。加了mixed=yes以后仔燕,一列中如果既有數(shù)字又有字符造垛,就會(huì)被判定為字符型。但如果一列真的是純數(shù)字晰搀,則會(huì)被判定為數(shù)值型五辽。另外,對(duì)于日期格式外恕,如果沒有mixed話杆逗,會(huì)把日期導(dǎo)成date格式的數(shù)值型,但使用mixed之后鳞疲,日期也會(huì)被當(dāng)作字符處理髓迎。
三、導(dǎo)入字符的長度問題
如果dbms=excel的話建丧,導(dǎo)入的字符變量最大長度默認(rèn)是1024,再長會(huì)截?cái)嗖ㄊ啤5侨绻尤胝Z句textsize=32767;可以設(shè)定這個(gè)長度翎朱。但是如果dbms=xlsx的話,就不會(huì)出這個(gè)問題尺铣。
網(wǎng)上說scantext是可以自動(dòng)掃描變量的最大寬度的拴曲,但是實(shí)際操作下來似乎并非如此,具體有什么作用還不知道凛忿。
四澈灼、預(yù)讀觀測(cè)問題
盡管使用了textsize=32767;,有些變量還是會(huì)被截?cái)唷_@是因?yàn)镾AS在讀入的時(shí)候叁熔,是預(yù)先檢查excel前面的若干行來判斷長度和變量類型的委乌,所以如果特別長的值在最后幾行,可能會(huì)導(dǎo)致沒有檢查到改行荣回,從而變量長度比值要短遭贸,以至于發(fā)生了截?cái)唷_@種情況就要用dbms=xlsx了心软。