文章1
XTH,公眾號:CDISC與SAS
制作匯總表時不用dummy的方法,解決分類變量數(shù)據(jù)缺失-- proc means/ freq
文章2
徐XTH,公眾號:CDISC與SAS
如何按照TFL模板給出的順序出表或者QC
之前文章介紹的方法,在實際工作當中碰到了些許問題。
產(chǎn)生問題的原因如下:
? ? ? ? 文章1:按條件篩選之后,待proc meas的數(shù)據(jù)集完全為空。
? ? ? 文章2:盡管按照proc format notsorted的順序排列,但是當我們需要proc transpose的時候依然要重新排序。
文章1:
? ? 之前說過proc format和proc means的preloadfmt組合可以不用自建dummy數(shù)據(jù),但是實踐中發(fā)現(xiàn)了一個隱形條件:數(shù)據(jù)集必須存在format定義的任意一個value。換句話說數(shù)據(jù)集肯定不能為空。
解決方法:
? ? ? ? proc format中新加一個定義:' ' = ' ',引號間要有空格。
? ? ? ? 同時空的數(shù)據(jù)集插入一條n=1的數(shù)據(jù),這里n=1詳看鏈接文章1?;蛘吆唵蝸碚fproc means里的參數(shù)var僅能計算數(shù)值,那么我直接n=1,這條觀測的其他變量就都是=' '。
結(jié)論:
? ? ? ? 因為proc format和數(shù)據(jù)集都有了相同的value: ' ',那么就可以實現(xiàn)不用創(chuàng)建dummy的需求。所以說兩邊具有相同的value,才是能體現(xiàn)preloadfmt的真正價值。
文章2:
? ? ? ? 我們在用proc means的時候通常不會class一個變量,比如我想要計算不同性別的受試者在不同藥物下的人數(shù),那么自然class藥物和性別。而且一般最終的展示是藥物為縱列,性別為橫行,那么肯定要transpose。
? ? ? ? 常用proc transpose應該知道要預先排序,但是如果按照我們proc format notsorted的排序是沒辦法操作的。
解決方法:
? ? ? 在proc means產(chǎn)生的數(shù)據(jù)集中生成一個id=_n_的變量,也就是讓id記住當前proc format notsorted的排序,然后這個數(shù)據(jù)集當作dummy,再和transpose后的數(shù)據(jù)集merge,最后再按id排序即可。
結(jié)論:
? ? ? 此方法沒什么新意,甚至還是需要構(gòu)造dummy數(shù)據(jù)集,之后可以再研究下transpose有沒有保留排序的方法。
總結(jié):
? ? ? ? 實際做表的過程中發(fā)現(xiàn),此一系列方法確實讓代碼簡潔,且分割成塊很容易理解。就算項目不同,復制過去更改的地方也只是format。推薦大家使用此方法,盡可能地把需要更改的地方集中在一塊。
如有問題,歡迎后臺私信討論。