1.ADXT數(shù)據(jù)集,要每個(gè)受試者取出唯一的檢查項(xiàng)來(lái) 然后進(jìn)行每個(gè)受試者每個(gè)檢查項(xiàng)目 唯一nodupkey排序賦值XTTTESTCD,做好之后再merge回一個(gè)受試者所有計(jì)劃外檢查項(xiàng)目數(shù)據(jù)集,得到相同檢查項(xiàng)目名稱(chēng)的帶著相同的檢查項(xiàng)目簡(jiǎn)稱(chēng)。

2.merge合并數(shù)據(jù)集的那一步,必須有if a and b;這條語(yǔ)句和同時(shí)標(biāo)記兩個(gè)數(shù)據(jù)集的in=a和in=b選項(xiàng),沒(méi)有是不正確的。因?yàn)閿?shù)據(jù)集想要保留的兩個(gè)數(shù)據(jù)共有的情況,不希望adsl有的 其他分析數(shù)據(jù)集沒(méi)有,此分析集有的adsl受試者人群里面沒(méi)有。
1. 不加?if a and b?的情況
行為:保留所有?SUBJID,無(wú)論其是否在?adfa1?或?adsl?中存在。
合并規(guī)則:
若?SUBJID?在?兩個(gè)數(shù)據(jù)集都存在:合并對(duì)應(yīng)觀測(cè)。
若?SUBJID?僅在一個(gè)數(shù)據(jù)集存在:合并后缺失變量的值填充為?.(缺失值)。
效果:類(lèi)似全外連接(FULL OUTER JOIN)。
示例:

2.加?if a and b?的情況
行為:僅保留同時(shí)在?adfa1?和?adsl?中存在的?SUBJID。
合并規(guī)則:僅保留?兩個(gè)數(shù)據(jù)集共有的?SUBJID。
效果:類(lèi)似內(nèi)連接(INNER JOIN)。

3.下面這段程序的結(jié)果不一樣,等于變量名的還好,不等于變量名的如果有判定空值的(比如col6=""),竟然以第二個(gè)輸入進(jìn)去的數(shù)為長(zhǎng)度造成了數(shù)據(jù)長(zhǎng)度的截?cái)唷? 下面以錯(cuò)誤的長(zhǎng)度為示例,生成的coL6變量長(zhǎng)度等于1.********非常重要在寫(xiě)一一些列表數(shù)據(jù)集時(shí)候用到,因?yàn)榇蟛糠殖绦騿T都是將等于空值的結(jié)果往后放。

4.撰寫(xiě)SDTM、ADAM常用函數(shù)
4.1條件判斷函數(shù)
ifc函數(shù)(條件,執(zhí)行語(yǔ)句1,執(zhí)行語(yǔ)句2):根據(jù)表達(dá)式是否為真、假或缺失返回字符值。
ifn函數(shù)(條件,執(zhí)行語(yǔ)句1,執(zhí)行語(yǔ)句2):根據(jù)表達(dá)式是否為真、假或缺失返回一個(gè)數(shù)值。


4.2
coalescec函數(shù)(s1,s2,..,sn):從字符參數(shù)列表中返回第一個(gè)非空值或非缺失值。
coalesce函數(shù)(s1,s2,..,sn):返回?cái)?shù)值參數(shù)列表中第一個(gè)不缺失的值。

4.3
n函數(shù):返回非空或非缺失數(shù)值的個(gè)數(shù)。(針對(duì)數(shù)值型變量或常量);
nmiss函數(shù):返回缺失數(shù)值的個(gè)數(shù)(針對(duì)數(shù)值型變量或常量,將字符型變量的所有值都當(dāng)作缺失值);
cmiss函數(shù):計(jì)數(shù)丟失參數(shù)的數(shù)量(數(shù)值型、字符型均可);
not missing :如果是缺失的,則返回0;反之,則返回1;
missing函數(shù):如果是缺失的,則返回1;反之,則返回0;
call missing:對(duì)參數(shù)進(jìn)行置空操作;
4.4
choosec函數(shù):返回一個(gè)數(shù)值,表示從參數(shù)列表中選擇的結(jié)果。根據(jù)變量的數(shù)值分別賦值。
whichc函數(shù):從字符串列表中返回該字符串的第一個(gè)位置。除字符串列表所列的其余結(jié)果返回0。

4.5?find函數(shù)(s,c,m,start):查找字符串s中從start開(kāi)始子字符串c的第一次出現(xiàn)的位置,m為i時(shí)忽略大小寫(xiě)。
4.6獲得首次給藥或參照開(kāi)始日期或參照結(jié)束日期方法,有兩種一種是通過(guò)proc sort排序選擇first.或last.的觀測(cè)為RFXSTDTC/RFXENDTC;另外一種方法是通過(guò)SQL步的min ,max函數(shù)計(jì)算,省掉了排序過(guò)程,且還能根據(jù)受試者的訪(fǎng)視時(shí)間或組別進(jìn)行分組求開(kāi)始、結(jié)束日期。

4.7在特定行中插入一行觀測(cè)值。如下:在第1行后插入空行,第二張是結(jié)果,如果以后想在某條觀測(cè)后插入空行,只需要找出來(lái)觀測(cè)號(hào),然后output輸出前面得內(nèi)容,然后插入自己想做的內(nèi)容,然后end完成之后再output;就可以了。下面的示例是將新插入的觀測(cè)全部做成空白。


下面這段代碼是在特定的觀測(cè)前,插入代碼。注意point=_n_的使用,如果沒(méi)有point=_n_,那么在第三條觀測(cè)插入之后又會(huì)重新從第一條觀測(cè)開(kāi)始重新set了sashelp.class數(shù)據(jù)集,而如果帶有point=_n_的話(huà),在將原始數(shù)據(jù)集第三條觀測(cè)變成空行之后,接著開(kāi)始set sashelp.class第三行之后的數(shù)據(jù)集觀測(cè)。/*PDV讀取的順序是if _n_條件判定,前兩條因?yàn)椴粷M(mǎn)足所以直接output;第三條滿(mǎn)足所以執(zhí)行if 里面的語(yǔ)句命名第三行觀測(cè)為空值,然后輸出,然后此時(shí)再set這個(gè)時(shí)候的sashelp.class數(shù)據(jù)集第三條觀測(cè)if end語(yǔ)句結(jié)束;然后繼續(xù)往下進(jìn)行sashelp.class第三行之后(也就是第4行開(kāi)始)的output操作。

5.1如何將橫向的數(shù)據(jù)集觀測(cè),不通過(guò)轉(zhuǎn)置和set語(yǔ)句快速轉(zhuǎn)為縱向的BDS結(jié)構(gòu)呢,如adlb/advs數(shù)據(jù)集的形式。
一個(gè)簡(jiǎn)單例子:注意數(shù)組使用,在同一個(gè)數(shù)組中,變量必須為同一類(lèi)型數(shù)據(jù)。都為字符型或都為數(shù)值型。

輸出結(jié)果:

adam中實(shí)現(xiàn)BDS結(jié)構(gòu),以上是寫(xiě)項(xiàng)目過(guò)程中實(shí)現(xiàn)BDS結(jié)構(gòu)比較方便的用法,其中vname取變量名作為PARAMCD值,vlabel取變量的標(biāo)簽名作為PARAM值,AVALC直接取變量值,ADES同理。whichc函數(shù)意思是根據(jù)AVALC中正常、NCS/CS的值依次賦予1,2,3因?yàn)樵趙hichc函數(shù)中顯示就是這么來(lái)的。

出處:CSDN博客號(hào)主:出來(lái)打工不惦記錢(qián)惦記什么。