SASPAC2 Real World Data高速化ツールの検討

557 Views

April 15, 25

スライド概要

[第11回大阪sas勉強会]

profile-image

SAS言語を中心として,解析業務担当者・プログラマなのコミュニティを活性化したいです

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

SASPAC2 Real World Data 高速化ツールの検討 鳴澤 輝子 (Narusawa Teruko) 仲家 諒 (Nakaya Ryo) Takeda Pharmaceutical Company Statistical and Quantitative Science 16April2025 @ Osaka SASBen(大阪SAS勉強会)

2.

あらまし • 近年、Real World Dataへの関心が高まっているが、膨大なデータを扱うことで 実行時間が長くなるという課題に直面している • この課題の解決策として、Real World Dataの効率的なハンドリングを可能にす る方法を見つけ出し、ストレスの軽減を図りたい • 事前調査として、Merge/Hash/SQL使用時の実行時間の比較、インデックス化 による実行時間の変化を計測した 本日は、事前調査の結果、および今後の計画(野望)を皆様に共有します

3.

調査結果①:Merge / Hash / SQLどれが一番早い? 通常の Merge・Hash・SQL処理時間 A: 大きなデータセット(症例数 : X軸×500) B: 100症例 (1症例1レコード) [処理] Time (sec) 大きなデータセット A から、 データセット B に入っている 100症例分のレコードを抽出 する 症例数 (単位:1,000,000) 3

4.

調査結果②:Merge / Hash / SQLどれが一番早い? インデックス化後 Merge・Hash・SQL処理時間 A: 大きなデータセット(症例数 : X軸×500) B: 100症例 (1症例1レコード) [処理] Time (sec) 大きなデータセット A から、 データセット B に入っている 100症例分のレコードを抽出 する 症例数 (単位: 1,000,000) 4

5.

調査結果③:インデックス化 Before / After 通常の Merge・Hash・SQL処理時間 Time (sec) Time (sec) インデックス化後の Merge・Hash・SQL処理時間 症例数 (単位:1,000,000) 5 症例数 (単位: 1,000,000)

6.

SAS インデックスとは? • データベース内のレコードを特定のキー変数(インデックス) を使って直接アクセスできるようにする仕組み 簡単に言うと…辞書の索引のようなもの 索引が付いていれば他のページを探しに行く必要 がなく、その分処理が速くなる • SAS dataset に Indexが付いてるとどうなるの? ✓ ソートが不要になる e.g: Merge、PROC MEANSなどの byステートメント ✓ SQLによる抽出が超高速になる ✓ Whereによる抽出が超高速になる ✓ ソートをするとインデックスが崩れるため、ソートは禁止 ✓ If 条件文使用時の抽出は遅い ✓ Where文の記載方法にも注意が必要? or→in、Substr() index()などを使うと遅い等 6

7.

インデックス化の方法 • とても簡単です。いつものデータステップにオプションを付けるだけ data diseasedata1(index=(icd10)); set disease; run ; 同じ名前のインデックスデータ.sas7bndx ができる data disease(index=(comb =(icd10 discode))); set disease; run ; [Keyの指定方法] •単一インデックス(1つのキー変数の値で構成される場合) •複合インデックス(複合キー変数の値で構成される場合) •UNIQUEオプション 7 どの指定方法を使うかは、データへのアクセス 方法により異なる。パフォーマンスを出せる 指定方法を、様々なケースで検証したい。

8.

今後に向けた Step1~Step4 - RWDへの活用 ~ RWD Express Package on SASPAC - Step 1: 実際のRWD解析にSASインデックスを活用 ←今ここ • 活用例 • Feasibility Analysis • 個別症例の抜き取りチェック Step 2: 汎用的に使えるようRWD用のマクロ化 • マクロ案 • インデックス一括作成 • ミニチュア版RWDを作成(特定の 1万症例を抽出など) • データセット分割(分けて個別の処理→後にSET) Step 3: タケダ社内でパッケージとしてリリース Step 4: 将来、SASPACで、Open Source化ができるか? 8

9.

References • SASPAC, Github, https://github.com/SASPAC • SAS Packages: The Way to Share (a How To), SAS Global Forum 2020, Bartosz Jablonski, https://www.sas.com/content/dam/SAS/support/en/sas-global-forum-proceedings/2020/4725-2020.pdf • SASPAC -あるGithubアーカイブのご紹介- , 第10回大阪SAS勉強会 2024, Ryo Nakaya, https://sites.google.com/view/osakasasbenkyokai/%E7%AC%AC10%E5%9B%9E • Using SAS Indexes with Large Databases, 15th annual NESUG Conference 2002, Alex Vinokurov and Lawrence Helbers, https://www.lexjansen.com/nesug/nesug02/bt/bt014.pdf • Indexing: A powerful technique for improving efficiency, pharmaSUG 2014, Arun Raj Vidhyadharan and Sunil Mohan Jairath, https://www.lexjansen.com/pharmasug/2014/BB/PharmaSUG-2014-BB01.pdf • The Complete Guide to SAS Indexes, SAS support, https://support.sas.com/content/dam/SAS/support/en/books/the-complete-guide-to-sas-indexes/60409.pdf • SASインデックスについて https://documentation.sas.com/doc/ja/lrcon/9.4/n06cy7dznbx6gen1q9mat8de6rdq.htm

10.

調査結果(表形式) 方法 症例数 レコード数 1 1000 10000 100000 1000000 2000000 3000000 4000000 5000000 6000000 merge 0.011 0.013 0.040 0.198 1.568 17.354 171.343 337.448 516.032 583.506 731.910 1082.825 sql 0.005 0.005 0.018 0.052 0.414 3.890 38.651 76.310 119.666 105.636 130.889 254.594 hash 0.038 0.013 0.025 0.056 0.375 3.386 35.121 67.217 106.391 119.561 153.106 229.333 merge (index後) 0.005 0.007 0.021 0.069 0.585 5.466 55.772 109.025 161.937 185.841 231.916 346.060 sql (index後) 0.004 0.006 0.018 0.022 0.024 0.023 0.022 0.029 0.175 0.103 0.047 0.054 hash (index後) 0.012 0.012 0.025 0.056 0.369 3.500 36.459 69.926 105.115 123.743 154.822 234.954 merge(Compress) 0.010 0.012 0.038 0.195 1.549 16.735 170.260 330.227 511.435 574.360 723.068 1070.871 10 10 100