proc means:解決做table時遇到的問題簡述
文章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。推薦大家使用此方法,盡可能地把需要更改的地方集中在一塊。
如有問題,歡迎后臺私信討論。