I am beginning to use the new Hemonc.org vocabulary recently added to the OMOP vocabulary. It seems it has wider coverage of Oncology drugs than ATC. I am posting my SQL here to get feedback on if I am doing anything wrong. In the data set I am running against, ATC finds 79 RxNorm ingredients. Hemonc.org finds 121 RxNorm ingredients. Here is my SQL:
ATC
SELECT c4.concept_name
, COUNT(DISTINCT de.person_id) unique_persons
FROM drug_exposure de JOIN concept c3 ON de.drug_concept_id = c3.concept_id
JOIN concept_ancestor ca2 ON c3.concept_id = ca2.descendant_concept_id
JOIN concept c4 ON ca2.ancestor_concept_id = c4.concept_id AND c4.concept_class_id = 'Ingredient'
WHERE drug_concept_id IN(
SELECT c2.concept_id
FROM concept_ancestor ca1 JOIN concept c1 ON ca1.ancestor_concept_id = c1.concept_id
JOIN concept c2 ON ca1.descendant_concept_id = c2.concept_id
WHERE ca1.ancestor_concept_id IN(
21601387 --ANTINEOPLASTIC AGENTS
)
)
GROUP BY c4.concept_name
ORDER BY COUNT(DISTINCT de.person_id) DESC
SELECT c4.concept_name
, COUNT(DISTINCT de.person_id) unique_persons
FROM drug_exposure de JOIN concept c3 ON de.drug_concept_id = c3.concept_id
JOIN concept_ancestor ca2 ON c3.concept_id = ca2.descendant_concept_id
JOIN concept c4 ON ca2.ancestor_concept_id = c4.concept_id AND c4.concept_class_id = 'Ingredient'
WHERE drug_concept_id IN(
SELECT c2.concept_id
FROM concept_ancestor ca1 JOIN concept c1 ON ca1.ancestor_concept_id = c1.concept_id
JOIN concept c2 ON ca1.descendant_concept_id = c2.concept_id
WHERE ca1.ancestor_concept_id IN(
35807188 --Chemotherapeutic
, 35807205 --Endocrine therapeutic
, 35807267 --Enzyme
, 35807277 --Hypomethylating agent
, 35807493 --Immunosuppresant
, 35807335 --Immunosuppressant
, 35807189 --Immunotherapeutic
)
)
AND EXISTS(
SELECT 1
FROM omop.concept_relationship cr1
WHERE c4.concept_id = cr1.concept_id_1 AND cr1.relationship_id IN('Rx antineopl of', 'Rx immunosuppr of')
)
GROUP BY c4.concept_name
ORDER BY COUNT(DISTINCT de.person_id) DESC