今天我分享一個(gè)SAS填補(bǔ)時(shí)間的宏,這個(gè)宏的思路很簡(jiǎn)單,填補(bǔ)最遲時(shí)間。什么事最遲時(shí)間呢?一般我們項(xiàng)目中規(guī)定的日期格式是YYMMDD10.格式,以2020年1月27日這一天舉例,YYMMDD10.的格式為“2020-01-20”。在這樣的格式下,臨床試驗(yàn)收集數(shù)據(jù)時(shí),一般3種缺失情況:1)年月日都缺失;2)日缺失; 3)月日缺失。可能有人會(huì)認(rèn)為,還有月缺失,年日不缺失的情況。這種情況,我們一般只保留年份的信息。什么是填補(bǔ)最遲時(shí)間呢?對(duì)于年月日都缺失的情況,我們一般不做處理;對(duì)于日缺失的情況,我們填補(bǔ)當(dāng)月的最后一天,可能是“-30”,“-31”,“-28”,“-29”;對(duì)于月日缺失的情況,我們填補(bǔ)那一年的最后一天,“-12-31”。
從缺失分類中,我們很容易就發(fā)現(xiàn),思路唯一的復(fù)雜點(diǎn)就是日缺失的情況下的填補(bǔ)。這個(gè)情況下,根據(jù)月份的不同,填補(bǔ)的值也會(huì)不同。會(huì)有三種情況,大月“-31”,小月“-30”以及二月的值“-28”或“-29”。一下是分享的宏程序:
這個(gè)宏有三個(gè)宏參數(shù),分別是dtc(待填補(bǔ)的變量), dtc_im(填補(bǔ)后的變量), dtcn(填補(bǔ)后變量的數(shù)值格式)。整個(gè)邏輯思路是,先根據(jù)變量值的長(zhǎng)度來判斷日期缺失的類型。長(zhǎng)度為10(2020-01-27)表明不缺失,不需要填補(bǔ);長(zhǎng)度為7(2020-01)表明日缺失,需要填補(bǔ)日的信息。這種情況下需要判斷,月份的信息,根據(jù)不同的月份確定填補(bǔ)值是30還是31;如果月份是2,那則需要讀取年份的信息進(jìn)一步判斷是否當(dāng)年是閏年,確定填補(bǔ)28還是29。長(zhǎng)度是4(2020),則表明月日缺失,這樣只需要填補(bǔ)年的最后一天“-12-31”不需要其他的填補(bǔ)。
這里介紹宏中的一個(gè)函數(shù),SCAN(a,b,c)函數(shù)。這個(gè)可以從中文的含義進(jìn)行理解,SCAN,掃描的含義。這個(gè)函數(shù)是如何掃描的呢?它有三個(gè)參數(shù),第一個(gè)參數(shù)是待掃描的變量或變量值;第二個(gè)是,一個(gè)整數(shù),表明掃描第幾個(gè)部分;第三個(gè)參數(shù),是分隔符,用分隔符來劃分一個(gè)字符串的各個(gè)部分。拿“2020-01-27”舉例,SCAN("2020-01-27",1,"-"),這個(gè)含義是掃描以“-”為分隔符字符“2020-01-27”的第1部分,這個(gè)值為“2020“。在這個(gè)函數(shù)中,第三個(gè)參數(shù)可以省略,默認(rèn)值為空格。