Извлечение данных 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,""))
Используйте существующие данные, если они верны, в противном случае переместите неподходящие данные в соответствующий столбец.
Сделать резервную копию. Формулы ввода. Проверьте, проверьте, проверьте. Преобразование в значения и удаление неверных столбцов.