sas table将缺失值计入百分比_医药SAS编程及应用之爱情草全部发芽啦
在DATA步的第一個語句,即讀數據之前定義變量的屬性,有這樣幾個優(yōu)點:
定義變量的長度、格式,名稱等屬性,對新生成的變量而言,這是必須的。如果不定義新變量的長度,可能會造成變量取值截尾。這里只是說可能,偶爾偷懶也不是完全不可以,但要保證不能出錯。
新生成的變量會出現在數據集的最前面,方便確認變量衍生過程是否正確。
數值型變量沒有定義長度的說法,我們可以統(tǒng)一給字符型變量賦予一個合適的長度,并全部寫在一個位置,這很大程序上帶來了程序編寫和更新的方便。
對長度大于200個字符的,我們在Log中顯示Note。注意這里沒有寫成真正的"ERROR",這是為了防止在搜索Log錯誤時,把這條Note當成是Error。
對字符型變量去首尾空格常常是有必要的(例如,有的原始變量在錄入時包括空格),尤其是數值型變量轉換成字符型變量的時候。
CATX函數可以以指定的分隔符連接字符串或變量,如果所連接變量有變量為空,則不會出現多余的分隔符。
在SDTMIG 3.2版本,EPOCH、VISIT、TAETORD等變量對某些domain來說是Permissable,但在新一版的SDTMIG 3.3中,可能就是一個標準變量了。所以在對數據做驗證的時候,要明確所使用的各種文件版本。
OUTPUT語句用于輸出數據。我們常規(guī)的DATA步沒有使用OUTPUT語句也能產生數據集,是因為它默認輸出的,如果要基于一定的條件而選擇性的輸出數據,那就要使用OUTPUT語句。OUTPUT語句的執(zhí)行可以形象地理解為:前面的條件讓合適的數據排在前面,后面的條件讓合適的數據排在后面,變量值可能會一直RETAIN。在使用OUTPUT語句時要小心,各種意想不到的錯誤可能都會出現,還不好查出原因在哪里,為了防止可能出現的RETAIN或者其他錯誤,可以當變量每次重新賦值的時候,使之初始化為缺失值。
TRANWRD函數可以把字符串里的指定字符轉換成另外一指定字符。
用法:TRANWRD(Source, From, To),Replace from character sting in source with to character string。語句TRANWRD(pct,’( ‘,’ (‘),把pct=“( 10.1%)”變成pct=“ (10.1%)”,也就是把括號里面的空格變到外面,這樣一來數據緊密聯系在一起了,還能保證括號右對齊。這里前面只有一個空格,如果是1.1%會有兩個空格,那就再用一次TRANWRD函數。這樣處理會使得TFL比較好看。
對數據TRANSPOSE后形成的變量易產生缺失值,可能出現某個變量在某些行有值,有些行為空,也就是缺失的。如果需要全部替換成0或者NA,可以用ARRAY一次性處理。
如果變量較少,可以用if var=. then var=0。
但如果變量較多,用array。
array zero{*} _numeric_;
? do i=1 to dim(zero);
? ? if zero{i}=. then zero{i}=0;
?end;
*是種省略寫法,’{}’,’()’均可,dim返回數據的維度,表示數據集中所有的數值型變量的個數。也可以把_numeric_替換成具體的變量。
對字符型變量,用法類似。
array char{*} _character_;
do i=1 to dim(char);
? if missing(char(i)) then char(i)=’0’;
end;
OPTIONS SYMBOLGEN MPTINT MLOGIC;
SYMBOLGEN:在log中編譯出宏變量的具體值,可以檢查宏變量返回值的對錯。
MPTINT:把編譯出的宏變量值直接代入到程序中,形成一段完全的代碼,用于檢驗整段程序運行是否正確。
MLOGIC:標識宏程序的開始和結束,可以用于區(qū)別MACRO和一般程序。
這三個選項是用于調試MACRO的,一般在項目的SETUP程序中就寫進去,這樣一來,可以看那些GLOBAL的MACRO在這個STUDY的適用性,另外,每個Team Member也可以測試自己的宏,省去了再加OPTIONS的麻煩。不建議在Individual程序中寫類似于LIBNAME,OPTIONS之類的GLOBAL語句,全局性語言可以放在GLOBAL程序中,如SETUP.SAS。
DATA步中可用IF…THEN…來做條件判斷,SQL語句中可以用CASE…WHEN。
如果是創(chuàng)建一個表(SQL語言中分別叫表、行、列,對應SAS中的數據集、觀測、變量),結果就不會OUTPUT出來,那就不用加NOPRINT語句,CASE前面有逗號。
如果語句較復雜,WHEN后面可以根據運算結果來指定相應的值,簡單的語句則直接用CASE變量。用ELSE語句來表示判斷結束,而且不能是空的ELSE語句(DATA步中的SELECT WHEN可用空的OTHERWISE結尾),如果條件已經選擇完畢,用ELSE+空格表示結束字符型變量的定義,ELSE +點表示結束數值型變量的定義,或者用ELSE表示最后一個條件。如果生成的是字符型變量,建義定義一個長度,以防TRUNCATED。
只要涉及到循環(huán),最好縮進,讓程序美觀易讀。
我們在寫Specification的時候,盡量讓它更美觀,更直接的呈現在User那邊,像下圖這種,你打開Excel,拖到這個變量的時候,它占滿了整個Excel Sheet,這樣看起來很不方便。
我們在進行各種Task時,銘記一點,你待它如初戀,它待你如真愛!
假設要以這樣一種縮進方式來呈現數據。
有的朋友使用空格來對數據進行縮進,以及獲得相應的層次感,包括各種Format,Label,Term,當然這也是可以的,在最后的表格中,把鼠標放在適當位置,指針顯示有空格。其實,我們可以使用RTF語句,比如下句完成按兩個字符一級的縮進。
Term太長可能會Wrap到下一行。
如果使用空格,下一行的數據會直接頂格,沒有體現出數據的層級。
使用RTF會自動地排在相應等級,但還是個有問題,下一行的數據到底是另外一個Term,還是上一個Carry下來的呢?像這里CMCECOD就有兩行了,但其實都是同一個CMDECOD,我們再加點語句以示區(qū)分:如果數據移到下一行,縮進一個空格。
如下圖所示,表格更好看了。
在做Table的時候,有朋友喜歡以這種方式插入一個空行,以分隔不同部分的內容,針對不具有擴展性的內容是可行的。但如果某些Summary Table是by Category、by Visit、by Name,且并不清楚要空多少行時,可以在REPORT中使用COMPUTE語句,這樣空行不會成為數據集的一部分,同時為OUTPUT服務。
如果有想寫文章的朋友,請聯系我,我需要你,內容不限!
總結
以上是生活随笔為你收集整理的sas table将缺失值计入百分比_医药SAS编程及应用之爱情草全部发芽啦的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 内存价格大起大落:硬件爱好者的困惑与抉择
- 下一篇: 内存条超频:性能提升背后的三大隐患