SAS 程序分享:獲取邏輯庫(kù)中的全部日期數(shù)據(jù)
在一項(xiàng)臨床試驗(yàn)中,試驗(yàn)數(shù)據(jù)被上傳到 EDC(臨床試驗(yàn)數(shù)據(jù)采集系統(tǒng))中,這些數(shù)據(jù)的后臺(tái)管理者被稱為 DM(數(shù)據(jù)管理員)。在試驗(yàn)數(shù)據(jù)間斷性更新時(shí),他們常常需要進(jìn)行這么一項(xiàng)工作:將受試者新錄入的日期數(shù)據(jù)與受試者的研究結(jié)束日期進(jìn)行比較,若新錄入的日期晚于研究結(jié)束日期,則新錄入日期很有可能有誤,需要進(jìn)一步檢查。
要完成這樣的工作,DM 常常將邏輯庫(kù)中全部的日期數(shù)據(jù)堆疊起來(lái),處理為一個(gè)受試者多條日期的數(shù)據(jù)結(jié)構(gòu),然后再通過(guò)表查詢技術(shù),獲取受試者的研究結(jié)束日期,完成最終的數(shù)據(jù)比較。

要獲取邏輯庫(kù)中的全部日期數(shù)據(jù),然后再將它們堆疊成一個(gè)新的數(shù)據(jù)集,本文給出了一種基于字典數(shù)據(jù)集和數(shù)據(jù)驅(qū)動(dòng)編程技術(shù)的做法:
以上代碼片段創(chuàng)建了兩個(gè)示例數(shù)據(jù)集:VS 和 EX,它們各自擁有一些日期形式的變量。我特意為其中的一部分變量設(shè)置了“DAT”作為名稱后綴,這是多數(shù)?EDC 對(duì)日期變量的設(shè)置。接下來(lái),程序執(zhí)行了以下動(dòng)作:
訪問(wèn)字典數(shù)據(jù)集,篩選?SASUSER 邏輯庫(kù)中,名稱含有“DAT”后綴的變量名列表;
若篩選結(jié)果非空,嘗試刪除數(shù)據(jù)集 work.all_date,為接下來(lái)的數(shù)據(jù)集合并做準(zhǔn)備;
遍歷變量列表,每次迭代都生成一個(gè)數(shù)據(jù)步程序,該數(shù)據(jù)步獲取當(dāng)前變量所在數(shù)據(jù)集名,當(dāng)前變量名,數(shù)據(jù)集中的行號(hào),以及該行號(hào)下的變量值。該數(shù)據(jù)步程序被執(zhí)行后將生成一個(gè)結(jié)果數(shù)據(jù)集;
第3步生成的結(jié)果數(shù)據(jù)集合并到數(shù)據(jù)集?work.all_date 中;
重復(fù)第3至4步,直到遍歷完整個(gè)變量列表;
程序執(zhí)行之后,將創(chuàng)建數(shù)據(jù)集?work.all_date,該數(shù)據(jù)集中的變量 _dat_ 是邏輯庫(kù)中全部以“DAT”作為名稱后綴的數(shù)據(jù)堆疊的結(jié)果,subjid 是受試者 ID 變量,而 _dsname_、_varname_、_rownum_ 則是溯源變量,它們清楚地記錄了數(shù)據(jù)的來(lái)源。
該做法思路直接,速度較快,但對(duì)變量名的形式有限制。若原始數(shù)據(jù)中的變量名沒(méi)有明顯規(guī)律,又該如何處理呢?請(qǐng)看下集,通過(guò)正則表達(dá)式或輸出格式判斷日期數(shù)據(jù)!