📄 icd9.ado
字号:
}
end
program define GenDesc
args new c userv long end
if "`end'" != "" {
local long "long"
}
FindFile
local fn `"`r(fn)'"'
tempname merge
quietly {
sort `c'
rename `c' __code9
merge __code9 using `"`fn'"', nokeep _merge(`merge')
rename __code9 `c'
rename __desc9 `new'
label var `new' "label for `userv'"
count if `merge'!=3 & `c'!=""
local unlab = r(N)
drop `merge'
if "`long'" != "" {
icd9 clean `c', dots
replace `c' = " " + `c' if substr(`c',1,1)!="E"
replace `c' = substr(`c'+" ",1,7)
if "`end'"=="" {
replace `new' = `c' + " " + `new'
}
else {
replace `new'= `new'+" "+`c'
local f : format `new'
if substr(`"`f'"',2,1)=="-" {
local f = "%" + substr(`"`f'"',3,.)
format `new' `f'
}
}
replace `new' = "" if trim(`new')==""
}
}
if `unlab' {
local s = cond(`unlab'==1, "", "s")
di in gr "(`unlab'" /*
*/ " nonmissing values invalid and so could not be labeled)"
}
end
program define GenRange
args new c userv range
P_ilist `"`range'"' ","
local list `"`s(list)'"'
local rest = trim(`"`s(rest)'"')
if `"`rest'"' != "" {
error 198
}
X_ilist `new' `c' `"`list'"'
end
* ---
* icd9 lookup
program define Lookup
P_ilist `"`0'"' ","
local list `"`s(list)'"'
local rest = trim(`"`s(rest)'"')
if `"`rest'"' != "" {
error 198
}
FindFile
local fn `"`r(fn)'"'
tempvar use
preserve
quietly {
use `"`fn'"', clear
X_ilist `use' __code9 `"`list'"'
keep if `use'
}
if _N == 0 {
di in gr "(no matches found)"
exit
}
local es = cond(_N==1, "", "es")
qui icd9 clean __code9, dots
di _n in gr _N " match`es' found:"
local i 1
while `i' <= _N {
local col = cond(substr(__code9[`i'],1,1)=="E",4,5)
di in ye _col(`col') __code9[`i'] _col(14) in gr __desc9[`i']
local i = `i' + 1
}
end
* ---
* icd9 search
program define Search
local i 1
gettoken s1 0 : 0, parse(" ,")
while `"`s`i''"' != "" & `"`s`i''"' != "," {
local i = `i' + 1
gettoken s`i' 0 : 0, parse(" ,")
}
local n = `i' - 1
if `n'==0 {
error 198
}
local 0 `", `0'"'
syntax [, OR ]
FindFile
local fn `"`r(fn)'"'
tempvar use
preserve
quietly {
use `"`fn'"', clear
gen byte `use' = 0
local i 1
while `i' <= `n' {
replace `use' = `use' + 1 /*
*/ if index(lower(__desc), lower(`"`s`i''"'))
local i = `i' + 1
}
}
if "`or'" == "" {
qui replace `use' = 0 if `use' != `n'
}
qui keep if `use'
if _N == 0 {
di in gr "(no matches found)"
exit
}
local es = cond(_N==1, "", "es")
qui icd9 clean __code9, dots
di _n in gr _N " match`es' found:"
local i 1
while `i' <= _N {
local col = cond(substr(__code9[`i'],1,1)=="E",4,5)
di in ye _col(`col') __code9[`i'] _col(14) in gr __desc9[`i']
local i = `i' + 1
}
end
* ---
* icd9 tabulate
program define Tabulate
syntax varlist(min=1 max=2) [fw aw iw] [if] [in] [, /*
*/ Generate(string) SUBPOP(string) * ]
if `"`subpop'"' != "" {
di in red "option subpop() not allowed with icd9 tabulate"
exit 198
}
if `"`generate'"' != "" {
di in red "option generate() not allowed with icd9 tabulate"
exit 198
}
tokenize `varlist'
tempvar c desc
Check `1', system(`c')
preserve
quietly {
if `"`if'"'!="" | "`in'"!="" {
keep `if' `in'
}
if "`weight'" != "" {
tempname wgtv
gen double wgtv = `exp'
compress wgtv
local w "[`weight'=`wgtv']"
}
local lbl : var label `1'
if `"`lbl'"' == "" {
local lbl "`1'"
}
keep `2' `wgtv' `c'
icd9 gen `desc' = `c', desc long end
label var `desc' `"`lbl'"'
}
tabulate `desc' `2' `w', `options'
end
* ---
* icd9 table
program define Table
syntax varlist(min=1 max=3) [fw pw aw iw] [if] [in] [, /*
*/ Contents(string) BY(varlist) * ]
tokenize `varlist'
tempvar c desc
Check `1', system(`c')
if "`contents'" != "" {
ConList `contents'
local list `s(list)'
local contopt contents(`contents')
}
if "`by'"!="" {
local byopt by(`byopt')
}
preserve
quietly {
if `"`if'"'!="" | "`in'"!="" {
keep `if' `in'
}
if "`weight'" != "" {
tempname wgtv
gen double wgtv = `exp'
compress wgtv
local w "[`weight'=`wgtv']"
}
local lbl : var label `1'
if `"`lbl'"' == "" {
local lbl "`1'"
}
keep `2' `wgtv' `c' `list' `by'
icd9 gen `desc' = `c', desc long end
label var `desc' `"`lbl'"'
}
table `desc' `2' `3' `w', `contopt' `byopt' `options'
end
program define ConList, sclass
sret clear
while "`1'" != "" {
if "`1'" != "freq" {
mac shift
sret local list `list' `1'
}
mac shift
}
end
* ---
* utility to parse and execute an icd9rangelist (ilist)
program define P_ilist, sclass
args str term
sret clear
gettoken tok : str, parse(" *-/`term'")
while `"`tok'"'!="" & `"`tok'"' != `"`term'"' {
gettoken tok str : str, parse(" *-/`term'")
IsEl `"`tok'"'
local tok `"`s(tok)'"'
gettoken nxttok : str, parse(" *-/`term'")
if `"`nxttok'"' == "*" {
gettoken nxttok str : str, parse(" *-/`term'")
local list `"`list' `tok'*"'
}
else if `"`nxttok'"'=="-" | `"`nxttok'"'=="/" {
gettoken nxttok str : str, parse(" *-/`term'")
gettoken nxttok str : str, parse(" *-/`term'")
IsEl `"`nxttok'"'
local list `"`list' `tok'-`s(tok)'"'
}
else local list `"`list' `tok'"'
gettoken tok : str, parse(" *-/`term'")
}
sret local list `"`list'"'
sret local rest `"`str'"'
end
program define IsEl, sclass
args c
local c = upper(trim(`"`c'"'))
if `"`c'"' == "" {
di in red "<nothing> invalid ICD-9 code"
exit 198
}
if index(`"`c'"', ".") {
local l = index(`"`c'"', ".")
local c = (trim( /*
*/ substr(`"`c'"',1,`l'-1) + substr(`"`c'"',`l'+1,.) /*
*/ ))
if `l'>0 & `l'<4 {
Invalid `"`c'"' "invalid placement of period"
}
if index(`"`c'"', ".") {
Invalid `"`c'"' "too many periods"
}
}
if length(`"`c'"') < 1 {
Invalid `"`c'"' "code too short"
}
if length(`"`c'"') > 5 {
Invalid `"`c'"' "code too long"
}
local l = substr(`"`c'"', 1, 1)
if (`"`l'"'<"0" | `"`l'"'>"9") & `"`l'"'!="E" & `"`l'"'!="V" {
Invalid `"`c'"' "1st character must be 0-9, E, or V"
}
local l = substr(`"`c'"', 2, 1)
if (`"`l'"'<"0" | `"`l'"'>"9") & `"`l'"'!="" {
Invalid `"`c'"' "2nd character must be 0-9"
}
local l = substr(`"`c'"', 3, 1)
if (`"`l'"'<"0" | `"`l'"'>"9") & `"`l'"'!="" {
Invalid `"`c'"' "3rd character must be 0-9"
}
local l = substr(`"`c'"', 4, 1)
if (`"`l'"'<"0" | `"`l'"'>"9") & `"`l'"'!="" {
Invalid `"`c'"' "4rd character must be 0-9"
}
local l = substr(`"`c'"', 5, 1)
if (`"`l'"'<"0" | `"`l'"'>"9") & `"`l'"'!="" {
Invalid `"`c'"' "5th character must be 0-9"
}
sret local tok `"`c'"'
end
program define Invalid
args code msg
di in red `""`code'" invalid: `msg'"'
exit 198
end
program define X_ilist
args newvar vn list
quietly {
gen byte `newvar' = 0
tokenize `"`list'"'
while "`1'" != "" {
if index("`1'", "-") {
local l = index("`1'", "-")
local lb = substr("`1'",1,`l'-1)
local ub = substr("`1'",`l'+1,.)
replace `newvar' = 1 /*
*/ if `vn'>="`lb'" & `vn'<="`ub'"
}
else if index("`1'", "*") {
local sub = substr("`1'",1,length("`1'")-1)
local l = length("`sub'")
replace `newvar' = 1 /*
*/ if substr(`vn',1,`l')=="`sub'"
}
else replace `newvar' = 1 if `vn' == "`1'"
mac shift
}
}
end
program define FindFile
capture noi quietly icd9_ff icd9_cod.dta, ado
if _rc==0 {
exit
}
local rc = _rc
di
di in gr "icd9 needs a dataset that records the valid ICD-9 codes."
di in gr "That dataset is stored with the icd9 program."
di in gr `"Type "help icd9" and see the installation instructions."'
exit `rc'
end
program define Query
syntax
FindFile
local fn `"`r(fn)'"'
preserve
quietly use `"`fn'"', clear
notes
end
exit
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -