Pinnacle 21: ADaM データセットや Define.xml の CDISC 準拠状況をチェックするツール 本発表で言及している Pinnacle: Enterprise version ( 有償版 ) Community version ( 無償版 ) 本発表で

Similar documents
SAS Web XML * ** * ** Web Data Analysis with SAS Input and Output of XML Data and Application to Real Estate Valuation Map Junnosuke Matsushima*, Hiro

Proc luaを初めて使ってみた -SASでの処理を条件に応じて変える- 淺井友紀 ( エイツーヘルスケア株式会社 ) I tried PROC LUA for the first time Tomoki Asai A2 Healthcare Corporation

Value Level Metadata に関する検討 CJUG-SDTM Team - 1 -

Exam : A JPN Title : SAS Base Programming for SAS 9 Vendor : SASInstitute Version : DEMO Get Latest & Valid A JPN Exam's Question and Answ


Microsoft Word - sample_adv-programming.docx

要旨 : データステップ及び SGPLOT プロシジャにおける POLYGON/TEXT ステートメントを利用した SAS プログラムステップフローチャートを生成する SAS プログラムを紹介する キーワード :SGPLOT, フローチャート, 可視化 2

データ構造の作成 一時 SAS データセットと永久 SAS データセットの作成 テキストファイルから SAS データセットを作成するための DATA ステップの使用例 : Data NewData; Infile "path.rawdata"; Input <pointer-control> var

Slide 1

untitled

電子データ申請に向けた品質管理サイクルの最適化 ~ プログラミング業務における deja vu からの脱却 ~ 小林千鶴, 平野勝也, 坂井絵理, 北西由武 ( 塩野義製薬株式会社解析センター ) Optimization of quality control cycle toward electr

<4D F736F F F696E74202D F8D F8DE28FE35F D208AD F18F6F95A882CC97AF88D3935F87415F88F38DFC97702E >

帳票 Mockup からの RTF 用テンプレート SAS プログラム自動作成ツール Taiho TLF Automated Tool の紹介 伊藤衡気 1 栗矢芳之 2 銭本敦 2 ( 株式会社タクミインフォメーションテクノロジー 1 大鵬薬品工業株式会社 2 )


PowerPoint プレゼンテーション

スライド 1

要旨 注釈付き症例報告書 ( Annotated CRF ) 作成の時間削減及び品質向上を目的とし,xmlv2 エンジンを用いた Annotated CRF の作成方法及び検証方法の検討を行った キーワード :XMLV2, CDISC, SDTM, Annotated CRF(aCRF), MAP,

スライド 1

DATA Sample1 /**/ INPUT Price /* */ DATALINES

スライド 1

<4D F736F F F696E74202D F F8B7B89595F D208AD F18F6F95A882CC97AF88D3935F87405F88F38DFC97702E >

Caché SQL に関するよくある質問

Microsoft PowerPoint - 【配布・WEB公開用】ACRONET_Kitahara.ppt [互換モード]

プレポスト【解説】

0831_02_落合_発表.pptx

スライド 1

proc STREAM による Analysis Results Metadata の作成 関根暁史 ( 藤本製薬株式会社 ) proc STREAM: The Feasible Method for Creating define.xml Files. Satoshi Sekine Fujimot

ODS GRAPHICS ON; ODS GRAPHICS ON; PROC TTEST DATA=SASHELP.CLASS SIDE=2 DIST=NORMAL H0=58 PLOTS(ONLY SHOWH0)=(SUMMARY); VAR HEIGHT;

スライド 1

解析プログラムの提出の可否( マクロの提出可否 仕様書の提出 ) 使用した解析ソフトウエアとそのバージョン 解析実施環境 (2) 電子データ提出を予定する各試験等の情報 ( 統合解析 ) 1 解析目的及び対象に関する情報 2 電子データに関する情報 3 解析実施に関する情報 (3) 電子データ提出を

スクールCOBOL2002

クエリの作成が楽になるUDF

スライド 1

n n n ( ) n Oracle 16 PostgreSQL 3 MySQL

Microsoft PowerPoint - コピー ~ SUGI-J2011_proceeding_Takumi_Sakoda配布用ロゴあり.ppt [互換モード]

1

libref libref libref

Microsoft PowerPoint - 01CDISC概要短縮版.ppt

Taro php.jtdc

Microsoft Word - CBESNet-It連携ガイドver8.1.doc

Microsoft PowerPoint pptx

PowerPoint プレゼンテーション


,, create table drop table alter table

スライド 1

intra-mart Accel Platform — イベントナビゲータ 開発ガイド   初版  

直接 Reports & Statistics タブへの移動も可能です A. Publication Finder の統計を取得する Publication Finder Reports 1 Publication Finder タブが選択されていることをご確認下さい 2 下記項目を入力して下さい

前ページからの続き // テキストボックス02 id 属性で取得 // id 属性で取得する場合は一意に決まるので 何番目かの指定は不要 var textbox02elem = document.getelementbyid("text_box02_id"); if ("001" == statee

第 1 章 条件分岐 この章では 条件に応じて処理を分岐する方法について説明します 1. CASE 式で複雑な条件分岐を実現 2. 関数を使用した条件分岐 3. MERGE 文による条件に応じた DML の実行

PROC PWENCODE IN=sastrust1 ; RUN ;

Web XXX.XXX.XXX.XXX - - [02/May/2010:12:52: ] "GET /url/url2/page2.htm HTTP/1.1" " "(compatibl

要旨 : SAS9.4 より Output Derivery System( 以下 ODS) に追加された Report Writing Interface( 以下 RWI) を使用して HTML 形式のレポート作成の実用性と可能性について検討する なお HTML 出力には タグの綺麗さから ODS



Basic descriptive statistics

はじめに コースの概要と目的条件分岐の方法や複雑な集計の手法など SQL のコーディングの幅を広げるためのテクニックについて説明します また パフォーマンスを考慮した記述方法や正しい結果を取得するための記述方法などについても あわせて説明します 本コースでは 実践的な SQL の記述手法を広く浅く紹

スライド 1

3 4 2

technews2012autumn

CAC

Kaplan-Meierプロットに付加情報を追加するマクロの作成


スライド 1

1 SQL Server SQL Oracle SQL SQL* Plus PL/SQL 2 SQL Server SQL Server SQL Oracle SQL SQL*Plus SQL Server GUI 1-1 osql 1-1 Transact- SQL SELECTFROM 058

NGSデータ解析入門Webセミナー

PowerPoint Presentation

<4D F736F F F696E74202D20352D335F8D5C90AC CF909482CC90B690AC82C695D28F572E707074>

PowerPoint プレゼンテーション

Advantage CA-Easytrieve Plus

(CC Attribution) Lisp 2.1 (Gauche )

< C D928696CA5F E706466>


122.pdf

国土地理院地理情報クリアリングハウスノードサーバ管理作業手順書目次 1. はじめに 本手順書の概要 国土地理院地理情報クリアリングハウスノードサーバ内コンテンツ 管理のための基本操作 本システム内のディレクトリ...2-1

スクールCOBOL2002

スライド 1

プレポスト【問題】

Microsoft Word - Android_SQLite講座_画面800×1280

Exam : J Title : Querying Microsoft SQL Server 2012 Version : DEMO 1 / 10

Microsoft Word - CBSNet-It連携ガイドver8.2.doc

TALON Tips < カレンダー ( 月別 ) の画面を表示する > 株式会社 HOIPOI 第 1.1 版 p. 1

ある実務担当者が考える ADaM 開発アプローチと標準の紹介 坂上拓 ( 株式会社中外臨床研究センターバイオメトリクス部データサイエンスグループ ) Introduce ADaM development approach and standards considered by a certain p

<91818C E90B690EA97708CF696B188F58D758DC0838A815B83742E706466>

PowerPoint プレゼンテーション

OpenCms_8_5_1_Taglib_Documentation_ja1_0

DATA test; /** **/ INPUT score DATALINES; ; PROC MEANS DATA=test; /** DATA= **/ VAR sc

PowerPoint プレゼンテーション

Microsoft Word - no15.docx

RaQuest スターターセット インストールマニュアル

FW APIServer 設定ガイド Version 年 2 月 3 日富士通株式会社 i All Right Reserved, Copyright FUJITSU LIMITED

tkk0408nari

標準化 補足資料

1,.,,,., RDBM, SQL. OSS,, SQL,,.

はじめに コースの概要と目的 Oracle をより効率的に使用するための SQL のチューニング方法について説明します また 索引の有無 SQL の 記述方法がパフォーマンスにどのように影響するのかを実習を通して理解します 受講対象者 アプリケーション開発者 / データベース管理者の方 前提条件 S

Gray [6] cross tabulation CUBE, ROLL UP Johnson [7] pivoting SQL 3. SuperSQL SuperSQL SuperSQL SQL [1] [2] SQL SELECT GENERATE <media> <TFE> GENER- AT

2011 ST講座 入門講座 DICOM規格 初級 –DICOMをうまく使いこなす-

PA4

ソフトウェアエンジニアリング - 機能 #54

PowerPoint プレゼンテーション

Transcription:

Pinnacle 21 Community の ADaM チェック機能を補完する XML Mapping を使用したプログラムの紹介 西岡宏 ( シミック株式会社 統計解析部 ) A Program with XML Mapping to Make up ADaM Checking Function of Pinnacle 21 Community Hiroshi Nishioka Statistical Analysis Department, CMIC Co., Ltd. 要旨 : 無償版 Pinnacle 21 では行われない Define.xml の Value-level Metadata のコードリストと ADaM データセットとの突合確認を行う SAS プログラムを紹介する キーワード : Define.xml, Value-level Metadata, XML Mapping, Pinnacle21 2

Pinnacle 21: ADaM データセットや Define.xml の CDISC 準拠状況をチェックするツール 本発表で言及している Pinnacle: Enterprise version 3.0.5 ( 有償版 ) Community version 2.1.3 ( 無償版 ) 本発表で言及している Define.xml: ADaM の Define.xml (version 2) 3 本発表で対象とする問題 : Define.xml に定義がない内容が ADaM にある状況 ADaM の Define.xml AGEU は YEARS Disease Grade の AVAL は 1 2 AVALC は Grade 1 Grade 2 4

本発表で対象とする問題 : Define.xml に定義がない内容が ADaM にある状況 ADaM データセットの内容 AGEU に YEAR AVAL に 3 AVALC に Grade 3 5 Pinnacle のチェック機能の一つ : ADaM データセットの変数の内容と Define.xml に定義されたコードリストに矛盾がないか? XPT 形式データセット Define.xml 6

Pinnacle のチェック機能の一つ : ADaM データセットの変数の内容と Define.xml に定義されたコードリストに矛盾がないか? XPT 形式データセット Define.xml 変数単位では無償版 / 有償版の両 Pinnacle でチェック可能 Value-level では無償版はチェック不可 7 PMDA の使用する CDISC バリデーションツール " 申請電子データ提出に関する技術情報 " https://www.pmda.go.jp/review-services/drugreviews/about-reviews/p-drugs/0028.html 8

有償版と無償版の関係 " 申請電子データシステムを利用した申請から承認までの手順について " https://www.pmda.go.jp/files/000213312.pdf 9 有償版と無償版の関係 Pinnacle の Web サイトに機能の互換性についての記載あり https://www.pinnacle21.com/downloads 10

本発表で対象とする問題 ( 再掲 ): Define.xml に定義がない内容が ADaM にある場合 ADaM の Define.xml AGEU は YEARS Disease Grade の AVAL は 1 2 AVALC は Grade 1 Grade 2 11 本発表で対象とする問題 ( 再掲 ): Define.xml に定義がない内容が ADaM にある場合 ADaM: ADBC AGEU に YEAR AVAL に 3 AVALC に Grade 3 12

無償版 Pinnacle は AGEU に対する Error を返すが AVAL AVALC に対しては返さない 有償版 Pinnacle は AVAL AVALC に対しても SD0037 の Error を返す 13 治験においては多数のデータセット 多数の Parameter を作成することになる 例 抗癌剤治験における主な ADaM: 患者背景 生存時間解析 抗腫瘍効果 腫瘍径 腫瘍マーカー バイタルサイン ECG 臨床検査値 機械的に確認できれば効率的 14

チェックの流れ 1 Define.xml から どの ADaM のどの変数に Value-level の設定があり どんなコードが使用されているのか抽出 Define.xml のタグ情報を SAS データセットに変換する.map ファイル Define.xml SAS データセット 15 チェックの流れ 2 ADaM データセットの Value-level の設定がある変数の内容を一覧化 ADaM データセット Freq Procedure で PARAM ごとに頻度集計 16

チェックの流れ2 どのADaM ADaM のどの変数に対してデータセットのValue-levelの設定がある Freq 変数の内容を一覧化 Procedureを使用するのかは前段のDefine.xmlを SASデータセット化した物を利用して制御 ADaM データセット Freq Procedure で PARAM ごとに頻度集計 17 チェックの流れ 3 Define.xml を SAS データセット化したものと Freq Procedure の結果を突合 Define.xml の情報 Freq Procedure の結果 =ADaM データセットの情報 18

チェックの流れ3 Define Define.xml 側になく をADaM SASデータセット化したものと側にのみある物 有償版 Freq Pinnacle Procedure のSD0037 の結果を突合のErrorに相当 Define.xml の情報 Freq Procedure の結果 =ADaM データセットの情報 19 チェックに必要な XML 情報 ブラウザで Variable にリンクが張られているものには Value-level Metadata の設定あり 20

def:valuelistdef タグ (AVALC に対応 ) の中に ItemRef タグ (Parameter ごとの記述に対応 ) ItemOID="IT.ADBC.AVALC.DSGRD" のように ID がふられ PARAM ごとの記述が区別される 21 Controlled Terms の欄に対応するのは ItemDef タグの中にある CodelistRef タグ 22

Where の欄に対応するのは def:whereclausedef タグの中にある CheckValueRef タグ 23 Decode 欄なしのコードリストに対応するのは CodeList タグの中にある EnumeratedItem タグ Decode 欄ありのコードリストに対応するのは CodeList タグの中にある CodeListItem タグ 24

Define.xml からの情報の抽出には XML Mapping 機能を使用.map ファイル に どの XML タグの要素 属性をどの SAS データセットのどの変数に格納するのか対応付けを記述する 本発表では vlm cl wh clval1 clval2 の 5 種の SAS データセットを用意する 25 <?xml version="1.0"?> <SXLEMAP version="1.2"> <TABLE name="vlm"> <TABLE-PATH syntax="xpath"> /ODM/Study/MetaDataVersion/def:ValueListDef/ItemRef </TABLE-PATH> <COLUMN name="item"> <PATH> /ODM/Study/MetaDataVersion/def:ValueListDef/ItemRef@ItemOID </PATH> <TYPE>character</TYPE> <DATATYPE>STRING</DATATYPE> <LENGTH>200</LENGTH> </TABLE> </SXLEMAP>.map ファイルの構造 ODS タグの中にある Study タグの中にある ItemRef タグの ItemOID の内容をデータセット vml の変数 item に格納する 変数の型は文字型 変数長は 200 26

データセット vlm 27 <TABLE name="cl"> <TABLE-PATH syntax="xpath"> /ODM/Study/MetaDataVersion/ItemDef/CodeListRef </TABLE-PATH> <COLUMN name="item"> <PATH>/ODM/Study/MetaDataVersion/ItemDef@OID</PATH> <TYPE>character</TYPE> データセット cl の <DATATYPE>STRING</DATATYPE> 変数 item に <LENGTH>200</LENGTH> ItemDefタグの OIDの内容を格納 <COLUMN name="clname"> <PATH> /ODM/Study/MetaDataVersion/ItemDef/CodeListRef@CodeListOID</PATH> <TYPE>character</TYPE> <DATATYPE>STRING</DATATYPE> <LENGTH>200</LENGTH> </TABLE>.map ファイルの構造 データセット cl の変数 clname に CodeListRef タグの CodeListOID 属性を格納 28

データセット cl Define.xml 中の全コードリスト名が格納される 必要なのはデータセット vlm の item と共通の物のみ 29 データセット wh Define.xmlのWhere 欄を格納 例 : ADBCのPARAMCD = "AGENDER" のVLM ADBCのPARAMCD in ("AGENDER","ARACE") のVLMがDefine.xml 中にあることを示す in 30

データセット clval1 clval2 in コードリストの詳細を格納 例 : コードリストDSGRDには Grade 1 Grade 2 コードリスト DSGRDN には 1 2 が定義されていることを示す 31 以上のデータセットを組み合わせてどの ADaM の どの PARAM の どの変数にどんなコードが定義されているか一覧化 32

proc freq data=adam.adbc; tables PARAMCD*AVAL/out=frq1; where PARAMCD="DSGRD"; 次は一覧の内容から Freq Procedure のプログラムを生成して ADaM データセットに対して実行 33 proc freq data=adam.adbc; tables PARAMCD*AVAL/out=frq2; where PARAMCD="DSTYPE"; 各 ADaM の Parameter 変数ごとに freq 34

proc freq data=adam.adbc; tables PARAMCD*AVALC/out=frq3; where PARAMCD="DSGRD"; 各 ADaM の Parameter 変数ごとに freq 35 proc freq data=adam.adbc; tables PARAMCD*AVALC/out=frq4; where PARAMCD="DSTYPE"; 各 ADaM の Parameter 変数ごとに freq 36

data _null_ ; set 一覧データセット ; file " 出力先パス vlmcl_tmp.sas"; put 'proc freq data=adam.' dsname ' noprint; tables ' whrvar '*' trgvar '/out=frq' seq ';'; この freq を実行するためには 一覧データセットの内容を元に freq procedure のプログラムを put を使って次々に出力し 37 data _null_ ; set 一覧データセット ; file " 出力先パス vlmcl_tmp.sas"; put 'proc freq data=adam.' dsname ' noprint; tables ' whrvar '*' trgvar '/out=frq' seq ';'; この freq を実行するためには 一覧データセットの内容を元に freq procedure のプログラムを put を使って次々に出力し 38

data _null_ ; set 一覧データセット ; file " 出力先パス vlmcl_tmp.sas"; put 'proc freq data=adam.' dsname ' noprint; tables ' whrvar '*' trgvar '/out=frq' seq ';'; この freq を実行するためには 一覧データセットの内容を元に freq procedure のプログラムを put を使って次々に出力し 39 data _null_ ; set 一覧データセット ; file " 出力先パス vlmcl_tmp.sas"; put 'proc freq data=adam.' dsname ' noprint; tables ' whrvar '*' trgvar '/out=frq' seq ';'; この freq を実行するためには 一覧データセットの内容を元に freq procedure のプログラムを put を使って次々に出力し 40

data _null_ ; set 一覧データセット ; file " 出力先パス vlmcl_tmp.sas"; put 'proc freq data=adam.' dsname ' noprint; tables ' whrvar '*' trgvar '/out=frq' seq ';'; %include "&vp. vlmcl_tmp.sas"; include して実行 41 プログラムから生成されるプログラム vlmcl_tmp.sas proc freq data=adam.adbc noprint; tables PARAMCD *AVAL /out=frq1 ; where AVAL ^=. and PARAMCD EQ "AGENDER" ; data frq1 ; set frq1 ; length clcd $200 chval2 $1000 dsname trgvar whrvar2 $8; frqseq=1 ; chval2='"agender" '; clcd=compress(aval ); dsname="adbc "; whrvar2="paramcd "; trgvar="aval "; proc freq data=adam.adbc noprint; tables PARAMCD *AVALC /out=frq2 ; where AVALC ^="" and PARAMCD EQ "AGENDER" ; data frq2 ; set frq2 ; length clcd $200 chval2 $1000 dsname trgvar whrvar2 $8; frqseq=2 ; chval2='"agender" '; clcd=avalc ; dsname="adbc "; whrvar2="paramcd "; trgvar="avalc "; 42

プログラムから生成されるプログラム vlmcl_tmp.sas proc freq data=adam.adbc noprint; tables PARAMCD *AVAL /out=frq1 ; where AVAL ^=. and PARAMCD EQ "AGENDER" ; data frq1 ; set frq1 ; length clcd $200 chval2 $1000 dsname trgvar whrvar2 $8; frqseq=1 ; chval2='"agender" '; clcd=compress(aval ); dsname="adbc "; whrvar2="paramcd "; trgvar="aval "; PARAMCD ごとに freq proc freq data=adam.adbc noprint; tables PARAMCD *AVALC /out=frq2 ; where AVALC ^="" and PARAMCD EQ "AGENDER" ; data frq2 ; set frq2 ; length clcd $200 chval2 $1000 dsname trgvar whrvar2 $8; frqseq=2 ; chval2='"agender" '; clcd=avalc ; dsname="adbc "; whrvar2="paramcd "; trgvar="avalc "; 43 プログラムから生成されるプログラム vlmcl_tmp.sas proc freq data=adam.adbc noprint; tables PARAMCD *AVAL /out=frq1 ; where AVAL ^=. and PARAMCD EQ "AGENDER" ; data frq1 ; set frq1 ; length clcd $200 chval2 $1000 dsname trgvar whrvar2 $8; frqseq=1 ; chval2='"agender" '; clcd=compress(aval ); dsname="adbc "; whrvar2="paramcd "; trgvar="aval "; PARAMCD ごとに freq proc freq data=adam.adbc noprint; tables PARAMCD *AVALC /out=frq2 ; where AVALC ^="" and PARAMCD EQ "AGENDER" ; data frq2 ; set frq2 ; length clcd $200 chval2 $1000 dsname trgvar whrvar2 $8; frqseq=2 ; chval2='"agender" '; clcd=avalc ; dsname="adbc "; whrvar2="paramcd "; trgvar="avalc "; 44

次々に Freq Procedure を実行して作成された SAS データセット 45 Define.xml から作成した一覧 1 と 46

proc freq で作成したデータセット 2 を 47 結合 48

1 になく 2 にのみあるレコードが Define.xml に未定義のコード 49 まとめ Value-level でのコード確認有償版 Pinnacle には有 無償版には無 PMDA は申請資料に対し有償版を使用する 無償版のみ使用していると 申請資料を提出後に PMDA 側で ADaM と Define.xml の不整合が見つかる可能性あり 申請資料提出前に無償版と併せて本発表のような機械的なチェックをかければ事前に修正可 50

参考資料.map ファイル全文 <?xml version="1.0"?> <SXLEMAP version="1.2"> <TABLE name="vlm"> <TABLE-PATH syntax="xpath"> /ODM/Study/MetaDataVersion/def:ValueListDef/ItemRef </TABLE-PATH> <COLUMN name="item"> <PATH>/ODM/Study/MetaDataVersion/def:ValueListDef/ItemRef@ItemOID</PATH> <TYPE>character</TYPE> <DATATYPE>STRING</DATATYPE> <LENGTH>200</LENGTH> </TABLE> <TABLE name="cl"> <TABLE-PATH syntax="xpath"> /ODM/Study/MetaDataVersion/ItemDef/CodeListRef </TABLE-PATH> <COLUMN name="item"> <PATH>/ODM/Study/MetaDataVersion/ItemDef@OID</PATH> <TYPE>character</TYPE> <DATATYPE>STRING</DATATYPE> <LENGTH>200</LENGTH> <COLUMN name="clname"> <PATH>/ODM/Study/MetaDataVersion/ItemDef/CodeListRef@CodeListOID</PATH> <TYPE>character</TYPE> <DATATYPE>STRING</DATATYPE> <LENGTH>200</LENGTH> </TABLE>

参考資料.map ファイル全文 <TABLE name="wh"> <TABLE-PATH syntax="xpath"> /ODM/Study/MetaDataVersion/def:WhereClauseDef/RangeCheck/CheckValue </TABLE-PATH> <COLUMN name="whname" retain="yes"> <PATH>/ODM/Study/MetaDataVersion/def:WhereClauseDef@OID</PATH> <TYPE>character</TYPE> <DATATYPE>STRING</DATATYPE> <LENGTH>200</LENGTH> <COLUMN name="whcla" retain="yes"> <PATH> /ODM/Study/MetaDataVersion/def:WhereClauseDef/RangeCheck@def:ItemOID </PATH> <TYPE>character</TYPE> <DATATYPE>STRING</DATATYPE> <LENGTH>200</LENGTH> <COLUMN name="whope" retain="yes"> <PATH> /ODM/Study/MetaDataVersion/def:WhereClauseDef/RangeCheck@Comparator </PATH> <TYPE>character</TYPE> <DATATYPE>STRING</DATATYPE> <LENGTH>10</LENGTH> <COLUMN name="chval"> <PATH> /ODM/Study/MetaDataVersion/def:WhereClauseDef/RangeCheck/CheckValue </PATH> <TYPE>character</TYPE> <DATATYPE>STRING</DATATYPE> <LENGTH>200</LENGTH> </TABLE>

参考資料.map ファイル全文 <TABLE name="clval1"> <TABLE-PATH syntax="xpath"> /ODM/Study/MetaDataVersion/CodeList/EnumeratedItem </TABLE-PATH> <COLUMN name="clname" retain="yes"> <PATH>/ODM/Study/MetaDataVersion/CodeList@OID</PATH> <TYPE>character</TYPE> <DATATYPE>STRING</DATATYPE> <LENGTH>200</LENGTH> <COLUMN name="cltype" retain="yes"> <PATH>/ODM/Study/MetaDataVersion/CodeList@DataType</PATH> <TYPE>character</TYPE> <DATATYPE>STRING</DATATYPE> <LENGTH>10</LENGTH> <COLUMN name="clorder"> <PATH>/ODM/Study/MetaDataVersion/CodeList/EnumeratedItem@OrderNumber</PATH> <TYPE>numeric</TYPE> <DATATYPE>INTEGER</DATATYPE> <LENGTH>8</LENGTH> <COLUMN name="clcd"> <PATH>/ODM/Study/MetaDataVersion/CodeList/EnumeratedItem@CodedValue</PATH> <TYPE>character</TYPE> <DATATYPE>STRING</DATATYPE> <LENGTH>200</LENGTH> </TABLE>

参考資料.map ファイル全文 <TABLE name="clval2"> <TABLE-PATH syntax="xpath"> /ODM/Study/MetaDataVersion/CodeList/CodeListItem </TABLE-PATH> <COLUMN name="clname" retain="yes"> <PATH>/ODM/Study/MetaDataVersion/CodeList@OID</PATH> <TYPE>character</TYPE> <DATATYPE>STRING</DATATYPE> <LENGTH>200</LENGTH> <COLUMN name="cltype" retain="yes"> <PATH>/ODM/Study/MetaDataVersion/CodeList@DataType</PATH> <TYPE>character</TYPE> <DATATYPE>STRING</DATATYPE> <LENGTH>10</LENGTH> <COLUMN name="clorder"> <PATH>/ODM/Study/MetaDataVersion/CodeList/CodeListItem@OrderNumber</PATH> <TYPE>numeric</TYPE> <DATATYPE>INTEGER</DATATYPE> <LENGTH>8</LENGTH> <COLUMN name="clcd"> <PATH>/ODM/Study/MetaDataVersion/CodeList/CodeListItem@CodedValue</PATH> <TYPE>character</TYPE> <DATATYPE>STRING</DATATYPE> <LENGTH>200</LENGTH> </TABLE> </SXLEMAP>

参考資料 チェックプログラム vlmcl.sas の全文 %let vp = 本プログラムを置くフォルダ ; libname adam ".sas7bdat 形式の ADaM データセットを置くフォルダ "; filename dfxml "ADaM の define.xml のフルパス "; filename defmap "Mapping ファイル vlmcl.map のフルパス "; libname dfxml xml xmlmap=defmap; proc sort data=dfxml.vlm by item; proc sort data=dfxml.cl by item; out=vlm; out=cl; data vlm2; merge vlm(in=d1) cl(in=d2); by item; if d1=1 and d2=1 then output; proc sort data=dfxml.wh out=wh; by whname whcla whope chval;

参考資料 チェックプログラム vlmcl.sas の全文 data wh2; set wh; by whname whcla whope chval; where index(whname,"wc.ad") > 0; length item $200 dsname whrvar trgvar $8 chval2 $1000 ; item = compress( "IT." substr(whname, index(whname,".")+1) ); dsname = compress( scan(whname,2,".") ); trgvar = compress( scan(whname,3,".") ); whrvar = compress( scan(whcla,3,".") ); retain chval2; if first.whope then chval2 = compress( '"' chval '"' ); else chval2 = compress( chval2 ',"' chval '"' ); data wh3; set wh2; by whname whcla whope chval; length frope $6; if whope = "NOTIN" then frope = "NOT IN"; else frope = whope; if last.whope then output; proc sort data=wh3; by item; data vlm3; merge vlm2(in=d1) wh3(in=d2); by item; if d1=1 and d2=1 then output; data clval3; set dfxml.clval1 dfxml.clval2;

参考資料 チェックプログラム vlmcl.sas の全文 proc sql ; create table vlm4 as select vlm3.item, vlm3.clname, vlm3.whname, vlm3.whcla, vlm3.dsname, vlm3.whrvar, vlm3.frope, vlm3.chval2, vlm3.trgvar, clval3.cltype, clval3.clorder, clval3.clcd from vlm3 full join clval3 on vlm3.clname = clval3.clname order by vlm3.item, clval3.clorder ; quit; data vlm5; set vlm4; where item ^= ""; if upcase(cltype) = "TEXT" then type="c"; else type="n"; proc freq data=vlm5 noprint; tables dsname*whrvar*frope*chval2*trgvar*type/ out=vlm6(drop=percent); data vlm7; set vlm6; retain seq; seq=sum(seq,1);

参考資料 チェックプログラム vlmcl.sas の全文 data _null_ ; set vlm7; file "&vp.\vlmcl_tmp.sas"; put 'proc freq data=adam.' dsname ' noprint; tables ' whrvar '*' trgvar '/out=frq' seq ';'; if frope in ("IN", "NOT IN") and type="c" then put 'where ' trgvar '^=""' ' and ' whrvar frope '(' chval2 '); '; else if frope in ("IN", "NOT IN") and type="n" then put 'where ' trgvar '^=. ' ' and ' whrvar frope '(' chval2 '); '; else if type="c" then put 'where ' trgvar '^=""' ' and ' whrvar frope chval2 '; else if type="n" then put 'where ' trgvar '^=. ' ' and ' whrvar frope chval2 '; '; '; put 'data frq' seq '; set frq' seq '; length clcd $200 chval2 $1000 dsname trgvar whrvar2 $8;'; if type="c" then put 'frqseq=' seq "; chval2='" chval2 "'; clcd=" trgvar '; dsname="' dsname '"; whrvar2="' whrvar '"; trgvar="' trgvar '"; '; else if type="n" then put 'frqseq=' seq "; chval2='" chval2 "'; clcd=compress(" trgvar '); dsname="' dsname '"; whrvar2="' whrvar '"; trgvar="' trgvar '"; '; put " "; %include "&vp.\vlmcl_tmp.sas";

参考資料 チェックプログラム vlmcl.sas の全文 data step01; set frq:; proc sort data=step01; by dsname chval2 trgvar clcd; proc sort data=vlm5 out=step02; by dsname chval2 trgvar clcd; data step03; merge step02(keep=dsname chval2 trgvar clcd whrvar frope in=d1) step01(keep=dsname chval2 trgvar clcd whrvar2 frqseq count in=d2) ; by dsname chval2 trgvar clcd; if d1=1 then d1fl="y"; if d2=1 then d2fl="y"; data step04; format dsname whrvar frope chval2 trgvar clcd count d1fl d2fl frqseq; set step03; keep dsname whrvar frope chval2 trgvar clcd count d1fl d2fl frqseq; if d1fl = "" and d2fl = "Y" then output ;