在統(tǒng)計(jì)師創(chuàng)建好shell后,之后SAS程序員可能就得把shell上的title和footnote、還有一些shell下的notes復(fù)制到EXCEL上,這個過程不僅需要花費(fèi)大量的時間,而且效率還低。
也許你現(xiàn)在還在痛苦的寫著SDTM,但是到后面你就得接觸越來越多的CDISC之外的東西,你得了解公司宏是怎么運(yùn)用的;項(xiàng)目前期準(zhǔn)備工作是什么樣的等等等等。
然后網(wǎng)上有很多文章介紹了如何自動或者半自動地讀取RTF文檔,獲取shell上的title和footnote,比如通過EXCEL自帶的VBA。我看了幾篇,然后也嘗試去運(yùn)行了一下,但是要么程序報錯,要么讀取不正確,亂七八糟的。
然后今天看了一篇文章,雖然到最后也不能達(dá)成我們的最終目的---完整的獲取shell上的title和footnote,但是也算是拓寬知識面吧??纯淳秃?。
整個過程都是在一個宏里面,截圖順序代表程序順序:
宏參數(shù)in代表你要讀取的word文件:具體路徑加上文件名
宏參數(shù)out代表你要輸出的數(shù)據(jù)集名
宏參數(shù)location代表你要輸出的excel物理路徑
session沒看到宏里面有用到(當(dāng)然,文章沒有把全部代碼列出)
page應(yīng)該是shell第幾頁,但是這樣不還是跟手動沒多大差別嗎?但是我們可以寫個循環(huán),說不定有用。
%let rc=%sysfunc(system(start winword));?
這個是打開word命令,成功運(yùn)行,這個可以算是一個小技巧。
data _null_;
x=sleep(5);? ? **5秒后再運(yùn)行;
?run;?
為什么要等5秒后SAS才運(yùn)行呢?主要是等word打開吧,要是你word還沒打開,就運(yùn)行下面的DDE,可能就報錯了。同理,下面打開excel也是一樣的。
之后就是打開DDE,讀取word文件,注意Viewheader是獲取header(我輸出失敗,所以我也不知道是哪里的header),如果你想獲取腳注還得Viewfooter,感覺好雞肋啊!
這是文章展示的截圖
之后就是關(guān)閉word,就跟我們ods?rtf之后還得ods rtf close一樣,可能是為了節(jié)省內(nèi)存資源吧。
之后打開excel,5秒后運(yùn)行程序,然后將讀取的word內(nèi)容寫入EXCEL;最后輸出excel。三步曲。
因?yàn)槲矣玫氖亲约弘娔X上的SAS,然后提示我EXCEL沒有獲得這個SAS的授權(quán)什么巴拉巴拉的。所以看不到真實(shí)效果。這篇文章也只是當(dāng)給大家樂呵樂呵。
當(dāng)然,還有其他方法導(dǎo)入shell上的title和footnote,等我成功了在寫出來吧。
文章來源:
《Reading Title and Footnote from RTF Output into SAS? utilizing Microsoft? Excel》Ajay Gupta, PPD Inc, Morrisville, NC