[程式] SAS 健保資料庫 篩選病人邏輯寫法

看板Statistics作者 (光的夜生活)時間7年前 (2018/04/11 09:47), 編輯推噓4(4013)
留言17則, 5人參與, 7年前最新討論串1/1
[軟體程式類別]: SAS [程式問題]: 邏輯 [軟體熟悉度]: 熟悉(DoLoop & macro) [問題敘述]: 各位統神大大早安,小弟目前在研究健保資料庫 研究對象是"服用特定藥物連續三個月以上的病人" cd跟oo檔接好了,服用特定藥物也找出來了,約1400萬筆資料(日期,id變數都有) 目前卡在 "至少連續三個月出現" 這個條件不知道要怎麼寫 謝謝各位大大提供一下想法 若能成功啟發我台北地區一杯星巴克特大美式回報:) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 203.71.94.11 ※ 文章網址: https://www.ptt.cc/bbs/Statistics/M.1523411269.A.B67.html

04/11 12:11, 7年前 , 1F
proc sql 做 fuzzy matching? 可能要跑很久..?
04/11 12:11, 1F

04/11 19:10, 7年前 , 2F
簡單一點的話,最初和最後時間間隔超過3個月,並且當中任
04/11 19:10, 2F

04/11 19:10, 7年前 , 3F
兩個連續時間間隔不超過3個月
04/11 19:10, 3F

04/12 00:14, 7年前 , 4F
要先定義連續 如果中斷幾天以上就不算連續 即判定不連續
04/12 00:14, 4F

04/12 00:14, 7年前 , 5F
可用每次開方日期跟處方天數加可容許天數 把每段銜接好 看
04/12 00:14, 5F

04/12 00:14, 7年前 , 6F
是否有滿三個月
04/12 00:14, 6F

04/12 13:52, 7年前 , 7F
可考慮用data step裡的retain 去檢查本次就醫跟前次就醫
04/12 13:52, 7F

04/12 13:53, 7年前 , 8F
之間的時間差 有超過一定天數的給個tag 再用sql把有tag的
04/12 13:53, 8F

04/12 13:53, 7年前 , 9F
病人列出並移除分析資料群
04/12 13:53, 9F

04/19 20:25, 7年前 , 10F
可以從終點著手,先定義停藥(多久沒有該藥紀錄就視為停藥
04/19 20:25, 10F

04/19 20:26, 7年前 , 11F
),這樣就可以用終點日減去起點日,看有沒有超過3個月
04/19 20:26, 11F

04/19 20:26, 7年前 , 12F
(3個月天數=365/12*3)
04/19 20:26, 12F

04/19 20:37, 7年前 , 13F
照字面也有最簡單的解讀,例如456月有就算是連續三個月
04/19 20:37, 13F

04/19 20:39, 7年前 , 14F
這個做法就會相對簡單很多XD 把年月依序coding成新序號
04/19 20:39, 14F

04/19 20:41, 7年前 , 15F
每一個月只保留一筆,將序號相差2以下的資料inner join
04/19 20:41, 15F

04/19 20:41, 7年前 , 16F
後並加總,等於3就表示連續三個月都有開到藥
04/19 20:41, 16F

04/19 20:43, 7年前 , 17F
但實務上會有bias,因為病人有時月尾就先來領下個月的藥
04/19 20:43, 17F
文章代碼(AID): #1QpMb5jd (Statistics)