Re: [程式] 利用SAS進行排序以及RETAIN語法的應用
※ 引述《Justee (想像力)》之銘言:
: ------------------------------------------------------------------------
: [軟體程式類別]: SAS
: [程式問題]: 資料處理
: [軟體熟悉度]: 中(3個月到1年)
: [問題敘述]:
: 我有一組資料庫,因為其中部分資料的結束時間為missing data,
: 所以想要使用最後一筆資料來取代。
這邊我自己發現一個問題,那就是當這兩個欄位都是時間欄位時,
"?"反而會被排在最後。
: 病人 處方開始日期 處方結束日期
: A 20120630 20120712
: A 20120615 20120713
: A 20120703 .
: A 20120629 .
: B 20120712 20120713
: B 20120629 .
: 問題一:
: 使用PROC SORT依病人與處方結束日期排序後,missing data都會被SAS視為無限小,
: 排序後落在最前面,可以命令將排序後的missing data排在最後嗎?
自問自答:可以,轉換為文字變項即可。
將missing data轉換為文字變項,排序的先後順序就會變到最後。
: 問題二:
: 如何使用RETAIN statement來幫missing data補值呢?
: 感謝各位大德的幫忙!
搜尋鐵大的文章+關鍵字missing可以找到類似的程式碼,以下是小弟的程式:
PROC SORT DATA=Test; BY ACC EndDate; RUN;
DATA Test; SET Test;
RETAIN EndDate EndDate_New;
IF EndDate^="?" THEN EndDate_New=EndDate; RUN;
RUN;
如此一來會創造出新欄位EndDate_New,裡面就是我所想求的結果。
在需要依照帳號的部分,我創造了一個欄位並利用lag函數。
lag_ACC=lag(ACC) /*lag函數表示前一列中的ACC。*/
IF ACC=lag_ACC THEN EndDate=Enddate_New;
這樣就可以解決需要同一帳號的問題了!
折騰了一天,可以找到解法真是很開心!!
感謝鐵大,也希望之後遇到類似問題的人可以獲益~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.121.97
※ 編輯: Justee 來自: 140.112.121.97 (07/25 11:08)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):