做項目,有時候需要導(dǎo)入外部EXCEL數(shù)據(jù)作為我們的補充數(shù)據(jù)集,常見的比如血藥濃度、還有一些免疫細胞檢測那些。
你們可能好奇為什么是通過外部文件導(dǎo)入的方法,而不是記錄在對應(yīng)的數(shù)據(jù)集里面?比如CRF上都設(shè)計了采集血藥濃度的Form,為什么檢測結(jié)果是通過外部文件傳輸呢?
一般來說,采集血藥濃度,采集的時間、時間點是記錄在CRF上,所以我們在數(shù)據(jù)集就能看到某某受試者什么時間采集了血藥濃度,但是血藥濃度、細胞這些檢測不是進行臨床試驗的醫(yī)院能夠做的,而是要送去專門的檢測機構(gòu)進行檢測,之后他們再將檢測結(jié)果傳輸給我們。所以我們處理這些數(shù)據(jù)集的時候,一般都是通過受試者、采集時間點進行拼接。
需要注意的是,采集的時間和檢測的時間是不一樣的,我這不一樣說的不是時間跨度上的不一樣,而是某些domain,IG上規(guī)定這個變量記錄的就是采集時間,而不是檢測時間,所以當(dāng)兩個日期都有的時候,需要注意哪個放在對應(yīng)的變量上,這是挺容易忽略的一點。
當(dāng)外部文件傳輸給我們之后,有的公司會要求先對外部數(shù)據(jù)進行QC,就是mian側(cè)將外部文件導(dǎo)成數(shù)據(jù)集,QC也將外部文件導(dǎo)成數(shù)據(jù)集,之后對數(shù)據(jù)集進行QC,?說實話,我覺得并不是多上了一層保險。
其他的不說,直接講我們常用的導(dǎo)入外部文件會出現(xiàn)的狀況吧。
我們導(dǎo)入外部文件,最常用的就是proc import了,先看下外部數(shù)據(jù),有好幾種情況:有數(shù)字和字母混合在一起的,有小數(shù)點后面是0的(建議大家導(dǎo)出成數(shù)據(jù)集的時候跟源數(shù)據(jù)保持一致,就是這個0也保留下來),有百分號

如果數(shù)據(jù)正常顯示的話,我們直接用proc import?加上dbms=xlsx導(dǎo)入
proc import datafile="D:\Practice\test.xlsx"
? ? out=pc_pk
? ? dbms=xlsx replace;
? ? range="sheet1$A1:";
? ? getnames=yes;
run;
①:看log,顯示EXCEL里面的列名發(fā)生了改變,SAS有時候很奇怪,有時候EXCEL里面的列名能正常顯示,也就是說這些“方案編號”、“受試者”也能作為我們數(shù)據(jù)集的變量名,不知道怎么對中文變量名進行處理的讀者,用
'方案編號'n? 就能進行正常的變量名處理了,比如rename,keep那些。


但是我還是強烈建議大家不要用getname=yes,因為這次EXCEL文件能輸出中文變量名,下次就會像這個log顯示的一樣,變量名發(fā)生了變化,如果你的程序是通過中文變量名進行數(shù)據(jù)處理,也就是說發(fā)生了上面的情況你還要去修改程序,那純屬浪費時間了,我已經(jīng)吃過好幾次虧了,所以,聽話。
②:然后發(fā)現(xiàn)最后一列小數(shù)點后面的0消失了,如上面所說,外部文件是什么樣子,我們導(dǎo)出成數(shù)據(jù)集的時候就輸出成什么樣,也就是這個0也保留下來,那么如何實現(xiàn)呢?
我們可以通過proc import + DBMS=EXCEL + mixed=yes
如果你想用mixed的話,上面的DBMS必須是EXCEL,而不是xlsx了,而且不能再寫成range="sheet1$A1:";這種格式了,而是要改成sheet="sheet1";
proc import datafile="D:\Practice\test.xlsx"
? ? out=pc_pk
? ? dbms=excel replace;
? ? sheet="sheet1";
? ? getnames=yes;
run;

發(fā)現(xiàn)有點面目全非了,發(fā)現(xiàn)我忘記加上了mixed=yes;加上后發(fā)現(xiàn)數(shù)據(jù)展示的很完美,所以建議大家如果有中文、字母、數(shù)字混合的excel文件,還是用這種方法。

而且發(fā)現(xiàn)用dbms=excel和dbms=xlsx,不用getname=yes的話,dbms=excel輸出的列名是F1,F2,F3......而dbms=xlsx輸出的是VAR1,VAR2,VAR3......這個也是需要注意的一點
③:有時候我們自己計算的PK參數(shù),從winnolin導(dǎo)出的時候,發(fā)現(xiàn)值是科學(xué)計數(shù)法,導(dǎo)入到數(shù)據(jù)集里面也是一樣的,這個時候?qū)XCEL進行一些設(shè)置可以顯示為正常的數(shù)字。

找到這個地方,一個個點下去,都是默認選項,之后選中你需要轉(zhuǎn)換科學(xué)技術(shù)法的列,格式選擇文本,就能正常顯示數(shù)字了,導(dǎo)入到數(shù)據(jù)集里面也是正常的數(shù)字。

需要和大家討論的是,如果外部文件發(fā)過來是科學(xué)計數(shù)法,我們這樣處理,算是改變數(shù)據(jù)嗎?但是將科學(xué)計數(shù)法的數(shù)據(jù)導(dǎo)入到數(shù)據(jù)集,然后進行一系列處理輸出成正常的數(shù)據(jù),我覺得也存在精度缺失的問題,還不如提前在EXCEL里面處理,歡迎給出您寶貴的意見。
為什么SAS導(dǎo)入EXCEL會出現(xiàn)上面的各種各樣的情況,我沒有做深入研究,感興趣的自己去SAS官網(wǎng)查下吧。