Извлечение данных Excel из столбца

У меня есть данные из больницы о смертях пациентов. Данные расположены неправильно, данные такие, как в ссылке ниже.

Все даты должны быть указаны либо в столбце DOA (столбец H), либо в столбце DOD (столбец I), либо в столбце MB (столбец J), а остальная часть текста должна быть расположена в отдельном столбце. Может ли кто-нибудь помочь мне очистить эти данные, поскольку у меня более 5000 наблюдений.введите описание ссылки здесь

      +-------+-----------+-------------+---------------+---------+-------------------+----------------------------------------------------+------------------+---------------------------------+------------+-----------------------+
| Sl.NO | District  | State P No  | Age In Years  | Sex     | Symptoms          | Co-Morbidities                                     | DOA              | DOD                             | MB Date    | Notes                 |
+=======+===========+=============+===============+=========+===================+====================================================+==================+=================================+============+=======================+
| 10    | X4        | 6553        | 53            | F       | Fever             |  Cold                                              |  Cough           | Thyroid disease                 | 10-06-2020 | 20-06-2020            |
+-------+-----------+-------------+---------------+---------+-------------------+----------------------------------------------------+------------------+---------------------------------+------------+-----------------------+
| 11    | X5        | 8872        | 62            | M       | Fever             | Diabetes Mellitus                                  | 16-06-2020       | 16-06-2020                      | 21-06-2020 |                       |
+-------+-----------+-------------+---------------+---------+-------------------+----------------------------------------------------+------------------+---------------------------------+------------+-----------------------+
| 12    | X5        | 8880        | 55            | M       | Pneumonia         |  Respiratory distress Obese,   Chronic Alcoholic   | 18-06-2020       | 20-06-2020                      | 21-06-2020 |                       |
+-------+-----------+-------------+---------------+---------+-------------------+----------------------------------------------------+------------------+---------------------------------+------------+-----------------------+
| 13    | X2        | 9149        | 70            | M       | Loss of Appetite  |  Weakness, Hypertension                            | 18-06-2020       | 18-06-2020                      | 21-06-2020 |                       |
+-------+-----------+-------------+---------------+---------+-------------------+----------------------------------------------------+------------------+---------------------------------+------------+-----------------------+
| 14    | X3        | 9150        | 46            | M       | Weakness          |  Convulsions, Hypertension                         | 17-06-2020       | 18-06-2020                      | 21-06-2020 |                       |
+-------+-----------+-------------+---------------+---------+-------------------+----------------------------------------------------+------------------+---------------------------------+------------+-----------------------+
| 15    | X4        | 7732        | 60            | Female  | Fever             |  Cough                                             |  Breathlessness  | uncontrolled Diabetes Mellitus  | 17-06-2020 | 22-06-2020            |
+-------+-----------+-------------+---------------+---------+-------------------+----------------------------------------------------+------------------+---------------------------------+------------+-----------------------+
| 16    | X5        | 9237        | 90            | M       | Asymptomatic      | Hypertension                                       |                  | 20-06-2020                      | 22-06-2020 | Died at his residence |
+-------+-----------+-------------+---------------+---------+-------------------+----------------------------------------------------+------------------+---------------------------------+------------+-----------------------+

2 ответа

Вы можете получить желаемый результат, используяPower Query, доступно в Windows Excel 2010+ и Office 365 Excel.

  • Выберите какую-нибудь ячейку в исходной таблице
  • Data => Get&Transform => From Table/Range
  • Когда откроется пользовательский интерфейс PQ, перейдите кHome => Advanced Editor
  • Запишите имя таблицы во второй строке кода.
  • Замените существующий код на M-код ниже.
  • Измените имя таблицы во второй строке вставленного кода на «настоящее» имя таблицы.
  • Изучите все комментарии, а такжеApplied Stepsокно, чтобы лучше понять алгоритм и шаги

На основе вашей выборки данных я предположил, что ошибка возникает потому, что есть три сопутствующих заболевания, которые разделены запятыми.

В таком случае я проверил, есть лиDODстолбец содержит дату.

  • если DOD содержит дату, то
    • Объединение сопутствующих заболеваний с DOA и DOD
    • Получите дату DOA из столбца даты MB.
    • Получите дату Министерства обороны из столбца примечаний.
    • Установите дату МБ на ноль

Если эта логика не работает для всех или ошибочна, ее можно легко изменить.

Вся магия обработки происходит в аргументахTable.Groupфункция

М-код

      let
    Source = Excel.CurrentWorkbook(){[Name="Table3"]}[Content],

//Replace any blanks ("") with null for easier processing down the road
    #"Replaced Value" = Table.ReplaceValue(Source,"",null,Replacer.ReplaceValue,{"Sl.NO", "District", "State P No", "Age In Years", "Sex", "Symptoms", "Co-Morbidities", "DOA", "DOD", "MB Date", "Notes"}),

//Group the table by the first six columns
    #"Grouped Rows" = Table.Group(#"Replaced Value", {"Sl.NO", "District", "State P No", "Age In Years", "Sex", "Symptoms"}, {

//Extract the columns to be processed using the logic shown
        {"Co-Morbidities", each 
            if Value.Is([DOD]{0}, type datetime)
                then [#"Co-Morbidities"]{0}
                else Text.Combine({[#"Co-Morbidities"]{0},[DOA]{0}, [DOD]{0}},", "), type text},
        {"DOA", each 
            if Value.Is([DOD]{0}, type datetime)
                then DateTime.Date([DOA]{0})
                else if [DOA]{0} = null then null 
                else DateTime.Date([#"MB Date"]{0}), type date},
        {"DOD", each 
            if Value.Is([DOD]{0}, type datetime)
                then DateTime.Date([DOD]{0})
                else DateTime.Date([Notes]{0}), type date},
        {"MB Date", each 
                if Value.Is([DOD]{0}, type datetime)
                    then DateTime.Date([#"MB Date"]{0})
                    else null, type date},
        {"Notes", each 
                if Value.Is([Notes]{0}, type datetime)
                    then null 
                    else [Notes]{0}}
        })
in
    #"Grouped Rows"

Полученные результаты

Делайте это поэтапно (потому что вам придется это проверить)! Это главным образом потому, что ваш пример показывает только 2 даты и есть вероятность, что данные отсутствуют. Как будто это не так просто, как починить таблицу.

Исходные данные находятся в формате A2:k8. Столбец H DOA и столбец I DOD.

      Cell L2 =ISNUMBER(SEARCH("2020",H2))
Cell M2 =ISNUMBER(SEARCH("2020",I2))

Правда: Дата хорошая. Неверно: нет даты. Ошибка при вводе данных.

      Cell N2 =IF(AND(NOT($L2),NOT($M2)),G2&", "&H2&", "&I2,"")
Cell O2 =IF(AND(NOT($L2),NOT($M2)),K2,IF(H2<>"",H2,""))
Cell P2 =IF(AND(NOT($L2),NOT($M2)),K2,I2)
Cell Q2 =IF(AND(NOT($L2),NOT($M2)),"",J2)
Cell R2 =IF(AND(NOT($L2),NOT($M2)),"",IF(K2<>"",K2,""))

Используйте существующие данные, если они верны, в противном случае переместите неподходящие данные в соответствующий столбец.

Сделать резервную копию. Формулы ввода. Проверьте, проверьте, проверьте. Преобразование в значения и удаление неверных столбцов.

Другие вопросы по тегам