2010-09-06 19 views
30

Sto cercando un elenco completo di codici ICD-9 (codici medici) per le malattie e le procedure in un formato che può essere importato in un database e referenziato a livello di codice. La mia domanda è fondamentalmente la stessa di Looking for resources for ICD-9 codes, ma il poster originale trascurava di menzionare esattamente dove "trovava" la sua lista completa.Elenco codici ICD-9 in formato XML, CSV o Database

Google non è sicuramente il mio amico qui perché ho passato molte ore a cercare il problema e ho trovato molti elenchi di tipi di testo (come il CDC) o siti web in cui posso eseguire il drill-down dell'intero elenco interattivo, ma non posso trovare dove trovare la lista che popolerebbe questi siti Web e può essere analizzata in un database. Credo che i file qui ftp://ftp.cdc.gov/pub/Health_Statistics/NCHS/Publications/ICD9-CM/2009/ abbiano quello che sto cercando, ma i file sono in formato RTF e contengono molta spazzatura e formattazione che sarebbe difficile da rimuovere con precisione.

So che questo deve essere stato fatto da altri e sto cercando di evitare di duplicare lo sforzo di altre persone ma non riesco a trovare un elenco xml/CSV/Excel.

+0

È possibile visualizzare la risposta [qui] (http://stackoverflow.com/a/1596643/65400) per la discussione su come formattare – Aaron

risposta

11

Dopo aver rimosso RTF non era troppo difficile analizzare il file e trasformarlo in un CSV. I miei file analizzati risultanti che contengono tutti i codici ICD-9 2009 per Malattie e Procedure sono qui: http://www.jacotay.com/files/Disease_and_ProcedureCodes_Parsed.zip Il mio parser che ho scritto è qui: http://www.jacotay.com/files/RTFApp.zip Fondamentalmente si tratta di un processo in due fasi: prelevare i file dal sito FTP CDC e rimuovere il RTF da loro, quindi selezionare i file RTF-free e analizzarli nei file CSV. Il codice qui è piuttosto approssimativo perché avevo solo bisogno di ottenere i risultati una volta.

ecco il codice per l'applicazione di analisi nel caso in cui i collegamenti esterni si abbassano (back-end a una forma che consente di selezionare un nome di file e fare clic sui pulsanti per farlo andare)

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 

End Class

+0

Potrebbe per favore indicare dove ha trovato i codici. –

+0

Grazie per questo. Sono stato alla ricerca di un set di tutti i codici me stesso. È incredibile quanto difficile sia il governo a farlo funzionare con questa roba. – Yuck

+0

i file ziped collegati contengono un file RTF, sembra che ci sia più di una riga per codice. Non mi è stato utile. – userJT

22

Centri per il Medicaid & servizi sanitari fornisce files excel che contengono solo i codici e la diagnosi, wh Può essere importato direttamente in alcuni database SQL, senza conversione.

Zipped Excel files, by version number

(Aggiornamento: Nuovo collegamento sulla base di commento qui sotto)

+4

Nuovo link: https://www.cms.gov/Medicare/Coding/ICD9ProviderDiagnosticCodes/codes.html – JohnKlehm

4

Chiaramente, un filo molto vecchio ma di recente ho intrapreso questo compito e scritto qui con collegamenti ai dati di origine -

http://colinwhite.net/dropplets/ICD

Stavo cercando di ottenere sia ICD-9 che ICD-10 in un database SQLite.

Sembra aver funzionato bene.

4

Center for Medicare Services (CMS) è attualmente incaricato di ICD, quindi penso che le versioni CDC di cui voi ragazzi fate riferimento possano essere solo copie o copie rielaborate. Ecco la pagina di medicare (~ difficile da trovare) che penso contenga i dati grezzi originali ("fonte di verità").

http://www.cms.gov/Medicare/Coding/ICD9ProviderDiagnosticCodes/codes.html

Sembra come di questo post l'ultima versione è V32.Lo zip che scaricherai conterrà 4 file di testo semplice che mappano il codice da descrizione (un file per ogni combinazione di DIAG | PROC e SHORT | LONG). Contiene anche due file excel (uno per DIAG_PROC) che hanno tre colonne, quindi il codice della mappa è entrambe le descrizioni (lunghe e brevi).

+0

Sembra che abbia trovato un altro becchino. Ho notato che la risposta implicava un gran numero di parsing, e mi sono reso conto che avevo già usato i set raw, quindi dove li ho presi? Stavo per pubblicare ... e ho visto il tuo link. (visitato!) – DoverAudio

+0

Se tutto quello che vuoi sono i codici ICD-9-CM, allora questo CMS zip ha tutto ciò che ti serve, ma se vuoi i nomi delle sottocategorie, cioè quei codici che rappresentano gruppi di altri codici, allora sei tu sfortunato. Per questo, è necessario l'RTF e l'analisi impacciata. Per inciso, le descrizioni spesso differiscono tra le versioni RTF e CDC. Penso che sia giusto dire che tutto è un casino, progettato per la stampa e la lettura, non l'analisi automatica. C'è XML per ICD-10. –

Problemi correlati