我正在寻找以疾病和程序的完整列表(医学代码),以一种可以导入到数据库中并以编程方式引用的格式的疾病和程序。我的问题基本上与 寻找ICD-9代码的资源, ,但原始海报忽略了他的完整列表。

Google绝对不是我在这里的朋友,因为我花了很多时间搜索谷歌搜索这个问题,并找到了许多丰富的文本类型列表(例如CDC)或我可以在这里进行交互式钻探到完整列表的网站,但我找不到可以从哪里获得的。将填充这些网站并可以解析到数据库中的列表。我相信这里的文件 ftp://ftp.cdc.gov/pub/health_statistics/nchs/publications/icd9-cm/2009/ 有我要寻找的内容,但是文件是丰富的文本格式,并包含大量垃圾和格式,难以准确删除。

我知道这必须由其他人完成,我正在努力避免重复其他人的努力,但我只是找不到XML/CSV/Excel列表。

有帮助吗?

解决方案 2

删除RTF后,将文件解析并将其变成CSV并不难。我由此产生的分析文件包含所有2009 ICD-9疾病和程序代码,都在这里: http://www.jacotay.com/files/disease_and_and_procedurecodes_parsed.zip我写的解析器在这里: http://www.jacotay.com/files/rtfapp.zip 基本上,这是一个两个步骤过程 - 从CDC FTP站点中获取文件,然后从它们中删除RTF,然后选择不含RTF的文件并将其解析到CSV文件中。这里的代码非常粗糙,因为我只需要获得一次结果。

这是解析应用程序的代码,以防外部链接下降(后端到一个表格,该表单使您可以选择一个文件名并单击按钮以使其开始使用)

Public Class Form1

Private Sub btnBrowse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBrowse.Click
    Dim p As New OpenFileDialog With {.CheckFileExists = True, .Multiselect = False}
    Dim pResult = p.ShowDialog()
    If pResult = Windows.Forms.DialogResult.Cancel OrElse pResult = Windows.Forms.DialogResult.Abort Then
        Exit Sub
    End If
    txtFileName.Text = p.FileName
End Sub

Private Sub btnGo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGo.Click
    Dim pFile = New IO.FileInfo(txtFileName.Text)
    Dim FileText = IO.File.ReadAllText(pFile.FullName)
    FileText = RemoveRTF(FileText)
    IO.File.WriteAllText(Replace(pFile.FullName, pFile.Extension, "_fixed" & pFile.Extension), FileText)

End Sub


Function RemoveRTF(ByVal rtfText As String)
    Dim rtBox As System.Windows.Forms.RichTextBox = New System.Windows.Forms.RichTextBox

    '// Get the contents of the RTF file. Note that when it is
    '// stored in the string, it is encoded as UTF-16.
    rtBox.Rtf = rtfText
    Dim plainText = rtBox.Text

    Return plainText
End Function


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim pFile = New IO.FileInfo(txtFileName.Text)
    Dim FileText = IO.File.ReadAllText(pFile.FullName)
    Dim DestFileLine As String = ""
    Dim DestFileText As New System.Text.StringBuilder

    'Need to parse at lines with numbers, lines with all caps are thrown away until next number
    FileText = Strings.Replace(FileText, vbCr, "")
    Dim pFileLines = FileText.Split(vbLf)
    Dim CurCode As String = ""
    For Each pLine In pFileLines
        If pLine.Length = 0 Then
            Continue For
        End If
        pLine = pLine.Replace(ChrW(9), " ")
        pLine = pLine.Trim

        Dim NonCodeLine As Boolean = False
        If IsNumeric(pLine.Substring(0, 1)) OrElse (pLine.Length > 3 AndAlso (pLine.Substring(0, 1) = "E" OrElse pLine.Substring(0, 1) = "V") AndAlso IsNumeric(pLine.Substring(1, 1))) Then
            Dim SpacePos As Int32
            SpacePos = InStr(pLine, " ")
            Dim NewCode As String
            NewCode = ""
            If SpacePos >= 3 Then
                NewCode = Strings.Left(pLine, SpacePos - 1)
            End If

            If SpacePos < 3 OrElse Strings.Mid(pLine, SpacePos - 1, 1) = "." OrElse InStr(NewCode, "-") > 0 Then
                NonCodeLine = True
            Else
                If CurCode <> "" Then
                    DestFileLine = Strings.Replace(DestFileLine, ",", "&#44;")
                    DestFileLine = Strings.Replace(DestFileLine, """", "&quot;").Trim
                    DestFileText.AppendLine(CurCode & ",""" & DestFileLine & """")
                    CurCode = ""
                    DestFileLine = ""
                End If

                CurCode = NewCode
                DestFileLine = Strings.Mid(pLine, SpacePos + 1)
            End If
        Else
            NonCodeLine = True
        End If


        If NonCodeLine = True AndAlso CurCode <> "" Then 'If we are not on a code keep going, otherwise check it
            Dim pReg As New System.Text.RegularExpressions.Regex("[a-z]")
            Dim pRegCaps As New System.Text.RegularExpressions.Regex("[A-Z]")
            If pReg.IsMatch(pLine) OrElse pLine.Length <= 5 OrElse pRegCaps.IsMatch(pLine) = False OrElse (Strings.Left(pLine, 3) = "NOS" OrElse Strings.Left(pLine, 2) = "IQ") Then
                DestFileLine &= " " & pLine
            Else 'Is all caps word
                DestFileLine = Strings.Replace(DestFileLine, ",", "&#44;")
                DestFileLine = Strings.Replace(DestFileLine, """", "&quot;").Trim
                DestFileText.AppendLine(CurCode & ",""" & DestFileLine & """")
                CurCode = ""
                DestFileLine = ""
            End If
        End If
    Next

    If CurCode <> "" Then
        DestFileLine = Strings.Replace(DestFileLine, ",", "&#44;")
        DestFileLine = Strings.Replace(DestFileLine, """", "&quot;").Trim
        DestFileText.AppendLine(CurCode & ",""" & DestFileLine & """")
        CurCode = ""
        DestFileLine = ""
    End If

    IO.File.WriteAllText(Replace(pFile.FullName, pFile.Extension, "_parsed" & pFile.Extension), DestFileText.ToString)
End Sub

最终课程

其他提示

Medicaid和Medicare服务中心提供的Excel文件仅包含代码和诊断,可以将其直接导入某些SQL数据库中,没有转换。

按版本编号进行Zipped Excel文件

(更新:基于下面评论的新链接)

Medicare Services中心(CMS)实际上是由ICD收取的,因此我认为您所引用的CDC版本可能只是副本或重新处理的副本。这是(很难找到)Medicare页面,我认为其中包含原始数据(“真相来源”)。

http://www.cms.gov/medicare/coding/icd9providerdiagnosticcodes/codes.html

看起来像本文时,最新版本是v32。您下载的zip将包含4个映射代码到描述的普通文本文件(diag | proc和短|长的每个组合的一个文件)。它还包含两个Excel文件(一个用于DIAG_PROC),它们具有三个列,因此将代码映射到 两个都 描述(长 短的)。

显然,一个非常旧的线程,但我最近执行了这项任务,并在此处将其编写为源数据的链接 -

http://colinwhite.net/dropplets/icd

我试图将ICD-9和ICD-10同时进入SQLITE数据库。

似乎效果很好。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top