MedDRA Dictionary: Reporting Version Updates Using SAS and Excel

Similar documents
USING HASH TABLES FOR AE SEARCH STRATEGIES Vinodita Bongarala, Liz Thomas Seattle Genetics, Inc., Bothell, WA

Data Edit-checks Integration using ODS Tagset Niraj J. Pandya, Element Technologies Inc., NJ Vinodh Paida, Impressive Systems Inc.

ET01. LIBNAME libref <engine-name> <physical-file-name> <libname-options>; <SAS Code> LIBNAME libref CLEAR;

CC13 An Automatic Process to Compare Files. Simon Lin, Merck & Co., Inc., Rahway, NJ Huei-Ling Chen, Merck & Co., Inc., Rahway, NJ

MedDRA Version Updates. MedDRA trademark is owned by IFPMA on behalf of ICH

An Efficient Tool for Clinical Data Check

Taming a Spreadsheet Importation Monster

It s not the Yellow Brick Road but the SAS PC FILES SERVER will take you Down the LIBNAME PATH= to Using the 64-Bit Excel Workbooks.

Power Data Explorer (PDE) - Data Exploration in an All-In-One Dynamic Report Using SAS & EXCEL

Missing Pages Report. David Gray, PPD, Austin, TX Zhuo Chen, PPD, Austin, TX

Clinical Data Visualization using TIBCO Spotfire and SAS

Validation Summary using SYSINFO

So Much Data, So Little Time: Splitting Datasets For More Efficient Run Times and Meeting FDA Submission Guidelines

Matt Downs and Heidi Christ-Schmidt Statistics Collaborative, Inc., Washington, D.C.

Out of Control! A SAS Macro to Recalculate QC Statistics

A Practical and Efficient Approach in Generating AE (Adverse Events) Tables within a Clinical Study Environment

Create Metadata Documentation using ExcelXP

A SAS Macro Utility to Modify and Validate RTF Outputs for Regional Analyses Jagan Mohan Achi, PPD, Austin, TX Joshua N. Winters, PPD, Rochester, NY

Utilizing the VNAME SAS function in restructuring data files

MedDRA Developer Webinar

PharmaSUG Paper TT11

Data Quality Review for Missing Values and Outliers

Indenting with Style

Defining the Extent of MedDRA Versioning Updates: MSSO Recommendation

PharmaSUG 2013 CC26 Automating the Labeling of X- Axis Sanjiv Ramalingam, Vertex Pharmaceuticals, Inc., Cambridge, MA

Application of Modular Programming in Clinical Trial Environment Mirjana Stojanovic, CALGB - Statistical Center, DUMC, Durham, NC

MedDRA BEST PRACTICES. Maintenance and Support Services Organization s (MSSO) Recommendations for Implementation and Use of MedDRA

Automating Comparison of Multiple Datasets Sandeep Kottam, Remx IT, King of Prussia, PA

Change Request Information

Quick and Efficient Way to Check the Transferred Data Divyaja Padamati, Eliassen Group Inc., North Carolina.

Advanced Visualization using TIBCO Spotfire and SAS

Making a List, Checking it Twice (Part 1): Techniques for Specifying and Validating Analysis Datasets

PhUSE US Connect 2019

A Tool to Compare Different Data Transfers Jun Wang, FMD K&L, Inc., Nanjing, China

Better Metadata Through SAS II: %SYSFUNC, PROC DATASETS, and Dictionary Tables

Doctor's Prescription to Re-engineer Process of Pinnacle 21 Community Version Friendly ADaM Development

Amie Bissonett, inventiv Health Clinical, Minneapolis, MN

The Output Bundle: A Solution for a Fully Documented Program Run

Give me EVERYTHING! A macro to combine the CONTENTS procedure output and formats. Lynn Mullins, PPD, Cincinnati, Ohio

A Macro that can Search and Replace String in your SAS Programs

Developing Data-Driven SAS Programs Using Proc Contents

Paper A Simplified and Efficient Way to Map Variable Attributes of a Clinical Data Warehouse

A Better Perspective of SASHELP Views

A Macro for Generating the Adverse Events Summary for ClinicalTrials.gov

Programmatic Automation of Categorizing and Listing Specific Clinical Terms

Useful Tips When Deploying SAS Code in a Production Environment

A Useful Macro for Converting SAS Data sets into SAS Transport Files in Electronic Submissions

A Few Quick and Efficient Ways to Compare Data

Automatically Configure SDTM Specifications Using SAS and VBA

Uncommon Techniques for Common Variables

Summary Table for Displaying Results of a Logistic Regression Analysis

Tracking Dataset Dependencies in Clinical Trials Reporting

To conceptualize the process, the table below shows the highly correlated covariates in descending order of their R statistic.

MedDRA Distribution File Format Document Version 16.0 MSSO-DI

SAS Macro Technique for Embedding and Using Metadata in Web Pages. DataCeutics, Inc., Pottstown, PA

PharmaSUG Paper PO12

Efficient Processing of Long Lists of Variable Names

Please Don't Lag Behind LAG!

Knock Knock!!! Who s There??? Challenges faced while pooling data and studies for FDA submission Amit Baid, CLINPROBE LLC, Acworth, GA USA

Macro Method to use Google Maps and SAS to Geocode a Location by Name or Address

What Do You Mean My CSV Doesn t Match My SAS Dataset?

How to Keep Multiple Formats in One Variable after Transpose Mindy Wang

SAS Drug Development Program Portability

Correcting for natural time lag bias in non-participants in pre-post intervention evaluation studies

Ditch the Data Memo: Using Macro Variables and Outer Union Corresponding in PROC SQL to Create Data Set Summary Tables Andrea Shane MDRC, Oakland, CA

MedDRA Update. MedDRA Industry User Group Meeting. 28 September 2018

T.I.P.S. (Techniques and Information for Programming in SAS )

Automate Clinical Trial Data Issue Checking and Tracking

Create a Format from a SAS Data Set Ruth Marisol Rivera, i3 Statprobe, Mexico City, Mexico

Paper PO06. Building Dynamic Informats and Formats

Electricity Forecasting Full Circle

CDISC Variable Mapping and Control Terminology Implementation Made Easy

PharmaSUG China Paper 059

Quick Data Definitions Using SQL, REPORT and PRINT Procedures Bradford J. Danner, PharmaNet/i3, Tennessee

PharmaSUG Paper PO10

Tales from the Help Desk 6: Solutions to Common SAS Tasks

Hidden in plain sight: my top ten underpublicized enhancements in SAS Versions 9.2 and 9.3

The Power of PROC SQL Techniques and SAS Dictionary Tables in Handling Data

So, Your Data are in Excel! Ed Heaton, Westat

A Macro to Keep Titles and Footnotes in One Place

Introduction to the Points to Consider Documents. MedDRA trademark is owned by IFPMA on behalf of ICH

Keeping Track of Database Changes During Database Lock

PharmaSUG China Paper 70

Recursive Programming Applications in Base SAS

Run your reports through that last loop to standardize the presentation attributes

This paper describes a report layout for reporting adverse events by study consumption pattern and explains its programming aspects.

Automating Preliminary Data Cleaning in SAS

Building Sequential Programs for a Routine Task with Five SAS Techniques

One Project, Two Teams: The Unblind Leading the Blind

Planning to Pool SDTM by Creating and Maintaining a Sponsor-Specific Controlled Terminology Database

A Simple Framework for Sequentially Processing Hierarchical Data Sets for Large Surveys

Automated Checking Of Multiple Files Kathyayini Tappeta, Percept Pharma Services, Bridgewater, NJ

Using SAS Files. Introduction CHAPTER 5

Facilitate Statistical Analysis with Automatic Collapsing of Small Size Strata

Macros for Two-Sample Hypothesis Tests Jinson J. Erinjeri, D.K. Shifflet and Associates Ltd., McLean, VA

Exporting Variable Labels as Column Headers in Excel using SAS Chaitanya Chowdagam, MaxisIT Inc., Metuchen, NJ

Accessing Data and Creating Data Structures. SAS Global Certification Webinar Series

%Addval: A SAS Macro Which Completes the Cartesian Product of Dataset Observations for All Values of a Selected Set of Variables

There s No Such Thing as Normal Clinical Trials Data, or Is There? Daphne Ewing, Octagon Research Solutions, Inc., Wayne, PA

2. Don t forget semicolons and RUN statements The two most common programming errors.

Transcription:

MedDRA Dictionary: Reporting Version Updates Using SAS and Excel Richard Zhou, Johnson & Johnson Pharmaceutical Research and Development, L.L.C Denis Michel, Johnson & Johnson Pharmaceutical Research and Development, L.L.C ABSTRACT MedDRA (Medical Dictionary for Regulatory Activities) is widely used to report adverse event data in clinical trials, as well as pharmaceutical post-marketing safety information. The dictionary is managed by the MSSO (Maintenance and Support Services Organization). New versions are released twice a year from the MSSO. The updated versions contain added records and modifications to previous records. A primary key variable, containing a unique code, is maintained across versions. Comparing older versions of MedDRA with newer versions, finding out and listing any new and important changes or additions is very useful to people who work in related fields. This paper presents a simple and efficient way to compare new and old versions of MedDRA. SAS code is used to create an Excel workbook containing formatted worksheets through automation. INTRODUCTION MedDRA is distributed in ASCII file format downloadable from the MSSO Web site. For clinical programming needs, usually we convert it to a SAS data set. The structure of the SAS MedDRA dictionary data set includes the following main elements: SOC_NAME - System Organ Class name HLGT_NAME - High-Level Group Term HLT_NAME - High-Level Term PT_NAME - Preferred Term LLT_NAME and LLT_CODE - Lowest-Level Term and code Additionally for each LLT, it also contains information such as PRIMARY_ - A flag of primary SOC (Y/N) LLT_CURR A flag of LLT currency (Y/N for Current/Non-current) The lowest level term code (LLT_CODE) is the primary key of the data set, from which all dictionary variables in the hierarchy can be determined. It contains a unique code that is retained across all versions of the dictionary. The lowest level term text (LLT_NAME) may be changed, but the code remains. If a code is no longer to be used, the code is not deleted. Instead, the record is updated with a flag that the lowest level term is not current (LLT_CURR = N ). Since the lowest level code is the primary key variable and the codes are not changed or deleted across dictionary versions, this variable can be used as the BY variable to compare the other variables in different dictionary versions. STRATEGY To compare older versions of MedDRA with newer versions, generally we select the primary path SOC in both the newer and older versions (i.e. PRIMARY_= Y ). We are interested on following cases: 1. Confirm that all LLT_CODE s in the old version have been included in the new version. If not, then output LLT codes not in the new version. As stated above, lowest level term codes should not be deleted in new dictionary versions. 2. Locate and output any LLT_CODE in the new version that are not in the old version. 3. Determine and output any changes in LLT_NAME for an identical LLT_CODE. 4. Determine and output any changes in LLT_CURR for identical LLT_CODE. If it is changed, there are two possibilities: 1

a. from current (in an old version) to non-current (in the new version), or, the reverse, b. from non-current (in an old version) to current (in the new version). 5. Locate and output any changes in PT_NAME for identical LLT_CODE 6. Locate and output any changes in SOC_NAME for identical LLT_CODE. To get results for above seven cases (including 4a and 4b), we need to merge newer and older versions of the MedDRA data set by key variable LLT_CODE and compare the matched variables LLT_NAME, LLT_CURR, PT_NAME and SOC_NAME. We need to process as follows. 1. Select PRIMARY_= Y to filter both two data sets 2. Rename LLT_NAME, LLT_CURR, PT_NAME and SOC_NAME in the older version of the MedDRA data set to new variable names so that we can distinguish between the older and newer versions. In processing the comparisons, we output seven SAS data sets (DropLLT, NewLLT, ChgLLT, Noncurrent, Current, PT, and SOC), each containing the observations corresponding to the specific category. From these SAS data sets, we can also generate an additional summary data set (SUMMARY) containing the observation counts in each specific category. Finally, we use SAS to generate an Excel output file to report updated information based on comparing the old and new MedDRA dictionary data sets. The seven SAS data sets created above, if they contain any observations, are converted to Excel worksheets in an Excel workbook. The Excel workbook includes multiple worksheets (corresponding to each category of differences that exists). The advantage of using Excel worksheets instead of SAS listings or rich text files is that we can quickly look at a comparison summary and easily find listings in any specific worksheet. SAS version 9 provides a very powerful tool, the LIBNAME engine for Microsoft Excel. This tool makes the process of converting SAS data to Excel format very simple and quick. The SAS data sets are written to individual Excel worksheets in an Excel workbook. EXAMPLE In the following example, assume we want to compare new MedDRA version 10.0 (data set name: mdra100) with old MedDRA version 9.1 (data set name: mdra91). libname dict "C:\MedDRA"; %let old=91; %let new=100; ******** * 1 Sort the old and new versions of MedDRA data by LLT_CODE(Lowest-Level code) *; * 2 Filter data by PRIMARY_= Y (primary path SOC=Yes) *; * 3 Keep only selected variables in both data sets *; ******** proc sort data= dict.mdra&old.(keep=llt_code llt_name llt_curr pt_name soc_name primary_) out=mdra_old(drop=primary_); where primary_='y'; by llt_code; proc sort data= dict.mdra&new.(keep=llt_code llt_name llt_curr pt_name soc_name primary_) out=mdra_new(drop=primary_); where primary_='y'; by llt_code; 2

* 1 Merge the data sets by LLT_CODE *; * 2 Rename LLT_NAME, LLT_CURR, PT_NAME, SOC_NAME to be different names *; * in the old data set to distinguish in comparisons *; * 3 Find differences for each pair of variables *; data DropLLT ChgLLT NewLLT(keep=llt_code llt_name llt_curr pt_name soc_name) Noncurrent(keep=llt_code llt_name llt_curr p_curr) Current(keep=llt_code llt_name llt_curr p_curr) PT(keep=llt_code llt_name pt_name p_ptnm soc_name p_socnm) SOC(keep=llt_code llt_name pt_name p_ptnm soc_name p_socnm); ***This nonexecutable informat statement is used to re-ordre variables; informat llt_code llt_name llt_curr p_curr pt_name p_ptnm soc_name p_socnm; merge mdra_old(in=in_old rename=(llt_name=p_lltnm llt_curr=p_curr pt_name=p_ptnm soc_name=p_socnm)) mdra_new(in=in_new); by llt_code; if in_old and ^in_new then output DropLLT; /*Should be zero obs*/ else if in_new and ^in_old then output NewLLT; else do; /* LLTs in old and new versions */ if llt_name^=p_lltnm then output ChgLLT; if llt_curr='n' and p_curr='y' then output Noncurrent; else if llt_curr='y' and p_curr='n' then output Current; if pt_name^=p_ptnm then output PT; if soc_name^=p_socnm then output SOC; end; format llt_code 10.; label p_lltnm='previous LLT name' p_curr='previous LLT currency' p_ptnm='previous PT name' p_socnm='previous SOC name'; **********************************************************; * Assign macro variable names for each SAS data set name *; * These will be used as Excel worksheet names *; **********************************************************; %let ds1=dropllt; %let ds2=newllt; %let ds3=chgllt; %let ds4=noncurrent; %let ds5=current; %let ds6=pt; %let ds7=soc; 3

***********************************************************; * Get the number of observations for data set &ds1 - &ds7 *; ***********************************************************; %macro ck_obs; %do i=1 %to 7; proc contents data=&&ds&i out=x(keep=nobs) noprint; proc sort data=x nodupkey; by nobs; data _null_; set x; %global obs_&i; call symput('obs_' "&i", compress(left(nobs))); %put &&obs_&i; %mend ck_obs; %ck_obs; ****************************************************; * Assign new macro variable name OLDVER and NEWVER *; * (so that if &old=91, then &oldver=9.1 *; * and if &new=100, then &newver=10.1 ) *; ****************************************************; data _null_; call symput('oldver',trim(left(put(&old/10,4.1)))); call symput('newver',trim(left(put(&new/10,4.1)))); **********************************************************; * Create the data set SUMMARY for a cover page. *; * Provide print instructions for the workbook. *; * Write the number of observations in each data set. *; * The summary data set will be converted to an Excel *; * worksheet that summarizes the comparison. *; **********************************************************; %macro cvpage; data summary; length NOTE $100.; NOTE="To print the entire workbook:"; output; NOTE="From the File Menu select Print"; output; NOTE="Choose Entire Workbook in the lower left hand corner"; output; NOTE="Press OK - to Print the entire workbook"; output; NOTE=' ';output; NOTE="Summary of MedDRA Changes"; output; NOTE="Version &oldver to &newver"; output; NOTE=' ';output; %do i=1 %to 7; %if &i=1 %then %do; NOTE="&obs_1 LLTs dropped from &oldver to &newver"; %if &i=2 %then %do; 4

output; %mend cvpage; %cvpage; NOTE="&obs_2 LLTs added from &oldver to &newver"; %if &i=3 %then %do; NOTE="&obs_3 LLTs changed text in name"; %if &i=4 %then %do; NOTE="&obs_4 LLTs changed to noncurrent"; %if &i=5 %then %do; NOTE="&obs_5 Noncurrent LLTs changed to current"; %if &i=6 %then %do; NOTE="&obs_6 LLTs mapped to different preferred terms"; %if &i=7 %then %do; NOTE="&obs_7 LLTs mapped to different system orgam classes"; %if &&obs_&i^=0 %then %do; NOTE=trim(NOTE) " (See &&ds&i worksheet)"; ** assign ds0 as the macro variable name for the SUMMARY data **; ** Summary will be the name of the converted Excel worksheet **; %let ds0=summary; ** Set obs# > 0 for the SUMMARY data so that it is output to Excel **; %let obs_0=1; * Use LIBNAME engine in MS Excel to generate an output report file *; * Convert SAS data sets to Excel worksheets and store in one workbook *; * (No worksheet to be created if the SAS data set has 0 observations) *; ** Assign xlsfile as the macro variable name for the output Excel file **; ** The descriptive file name includes the old and new versions compared**; %let xlsfile=meddra_changes_&old._&new; ** Define a LIBNAME for the directory of the output Excel file **; ** The Excel file is a workbook containing multiple worksheets **; libname WrkBk EXCEL "C:\MedDRA\&xlsfile..xls" ver=2002; 5

** Macro mdxls writes the summary Excel worksheet and any of the seven **; ** SAS data sets that contain any observations to additional Excel **; ** worksheets in a single Excel workbook named above **; %macro mdxls; %do i=0 %to 7; %if &&obs_&i^=0 %then %do; data WrkBk.&&ds&i; set &&ds&i; libname WrkBk clear; quit; %mend mdxls; %mdxls; The output report file is showing in the figure 1-6 below. 6

Figure 1. Summary Sheet Figure 2. NewLLT Sheet (Listing of new LLT_CODEs) Figure 3. ChgLLT Sheet (Listing of changes in LLT_NAME) 7

Figure 4. Noncurrent Sheet (Listing of changes from current to non-current in LLT_CURR) Figure 5. PT Sheet (Listing of changes in PT_NAME) 8

Figure 6. SOC Sheet (Listing of changes in SOC_NAME) As previously mentioned, the MedDRA dictionary is usually released by MSSO every six months. To get an updated report file, we only need to update the version numbers (%let old= ; %let new=;) and run the program. CONCLUSION This paper describes an efficient strategy for comparing MedDRA dictionary versions using the SAS system to generate output in Excel format. Using an Excel workbook with multiple worksheets as the output report file is a practical selection, making it easy and fast to check any specific results. The SAS LIBNAME Engine for Excel provided a simple but very powerful tool to generate the output report with complete automation. REFERENCES [1] http://www.meddramsso.com/mssoweb/index.htm [2] http://www.codingplus.com/faq.cfm [3] Choate, Paul and Martell, Carol (2006), De-Mystifying the SAS LIBNAME Engine in Microsoft Excel: A Practical Guide CONTACT INFORMATION Your comments and questions are valued and encouraged. Contact the authors at: Richard Zhou Johnson & Johnson Pharmaceutical Research and Development, L.L.C. 920 Route 202 PO Box 300 Raritan, NJ 08869 Email: rzhou@prdus.jnj.com 9

Denis Michel Johnson & Johnson Pharmaceutical Research and Development, L.L.C. 1125 Trenton-Harbourton Road PO Box 200 Titusville, NJ 08560 Email: dmichel@prdus.jnj.com SAS and all other SAS Institute Inc. product or service names are registered trademarks or trademarks of SAS Institute Inc. in the USA and other countries. indicates USA registration. MedDRA is a registered trademark of the International Federation of Pharmaceutical Manufacturers and Associations (IFPMA). Other brand and product names are trademarks of their respective companies. 10