SAS導(dǎo)入外部excel文件時(shí)幾種方式,以及getnames=YES與getnames=NO區(qū)別

在SAS撰寫AE.CM.MH.PR數(shù)據(jù)集過程中,經(jīng)常牽扯到外部導(dǎo)入EXCEL文件,用什么格式導(dǎo)入,如何正確導(dǎo)入,牽涉到讀入進(jìn)去的變量名,規(guī)范合規(guī)。

對于后綴為.xls格式的文件,有兩種:

一種是proc import過程的dbms=xls,一種是proc import過程的dbms=excel。

對于后綴為.xlsx格式的文件,有兩種:

一種是proc import過程的dbms=xlsx,一種是proc import過程的dbms=excel。


這兩個(gè)格式的文件,用兩種導(dǎo)入格式進(jìn)行導(dǎo)入各自有什么區(qū)別呢?讓我們來演示一下:

1.1xls文件用xls格式

日志報(bào)錯(cuò)

xls文件中是存在"腫瘤-放射治療史"sheet的,因此xls用xls讀取不同

1.2xls文件用excel格式

日志不報(bào)錯(cuò)


導(dǎo)入成功之后的變量名是按照col1開頭一次往下排序進(jìn)行的


此時(shí),從這個(gè)文件中導(dǎo)入的字符就是字符型,數(shù)值型就是數(shù)值型。

如果改變此時(shí)的getnames=no,結(jié)果變成下圖,

第一行的列名不會(huì)讀取進(jìn)來,列名顯示的是F開頭依次往下排序,但是有個(gè)bug就是xls文件有些列標(biāo)頭識別不了,用句點(diǎn)表示的

此時(shí)的導(dǎo)入,依然是文件是字符型就是字符型,文件是數(shù)值型就是數(shù)值型。

假如我們想要導(dǎo)入的文件,都將所有列變?yōu)樽址?,那么xls就不可以實(shí)現(xiàn),需要將此文件另存為.xlsx后綴的文件,不可以直接修改后綴名稱,會(huì)導(dǎo)致文件損壞。

2.1后綴.xlsx文件用dbms=xlsx格式導(dǎo)入。

xlsx文件用xlsx后綴導(dǎo)入,雖然不報(bào)錯(cuò),但是日志提示列變量均變?yōu)榱俗址?/div>

在一些導(dǎo)入外部文件做PT/PTCD/HLT/HLTCD的編程中,方便統(tǒng)一編程,而不至于有的字符型有的數(shù)值型。


導(dǎo)入之后的數(shù)據(jù)集變成了以VAR開頭依次的列名,列名稱讀取進(jìn)去了,只不過這里顯示的是變量名

如果getnames=NO,


此時(shí)數(shù)據(jù)集列名變成了excel文件的形式,且跟上面日志報(bào)錯(cuò)一致,都是提示轉(zhuǎn)為了字符型

2.2后綴.xlsx文件用dbms=excel格式導(dǎo)入


1.getnames=yes

日志并沒有提示跟.xlsx文件用dbms=xlsx文件導(dǎo)入的格式一樣,轉(zhuǎn)為字符型,而是依然是字符型是字符型,數(shù)值型是數(shù)值型,且類似于上面1.2過程

如果改為getnames=no,結(jié)果依然沒有提示轉(zhuǎn)為字符型。結(jié)果類似于.xls文件用EXCEL轉(zhuǎn)換——有的列名顯示不出來。

因此綜上1.1-2.2所述結(jié)果,若想再導(dǎo)入外部文件的過程中省時(shí)省力:那么最好以.xlsx文件格式結(jié)尾,以.xlsx格式進(jìn)行導(dǎo)入,getnames=no 將所有變量轉(zhuǎn)為字符型,如下圖展現(xiàn)的結(jié)果。

Tips:另外,在撰寫本篇文章過程中發(fā)現(xiàn),當(dāng)類似的excel文件打開之后再用proc import過程導(dǎo)入,日志均提示文件已經(jīng)在使用中,而當(dāng)DBMS=EXCEL過程時(shí),確可以正常導(dǎo)入,且文件打開與否均能正常導(dǎo)入。

另外,如果大家每次導(dǎo)入外部excel文件或者讀取sdtm specs時(shí)候,每次關(guān)閉都很麻煩,那就要把excel文件設(shè)置成共享,親測有效?。∵@樣無論文件打不打開均可以導(dǎo)入了。

分享:用相對路徑導(dǎo)入外部的一些文件。

1.用這段代碼,放在一個(gè)程序里,保存在m5 sdtm某個(gè)程序文件夾下,會(huì)獲取路徑信息

%macro pathfind;

%if %length(%sysfunc(getoption(sysin)))>0 %then %do;

/* Batch Execution */

%sysfunc(getoption(sysin))

%end;

%else %do;

/* Interactive Execution */

%sysget(SAS_EXECFILEPATH)

%end;

%mend pathfind;

%LET _SASPROGRAMFILE = -%pathfind;

%LET m5=%substr(&_SASPROGRAMFILE,2,%INDEX(&_SASPROGRAMFILE.,\tabulation)-2);

2.命名第二級名稱,并通過二級名稱,創(chuàng)建三級名稱

3.命名相對路徑文件與名稱,定義宏變量為全局宏變量

4.這樣每次導(dǎo)入的時(shí)候直接調(diào)用,這個(gè)全局宏變量名稱就行

完。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容