---
title: SASPAC2 Real World Data高速化ツールの検討
tags: 
author: [森岡裕[SASユーザー総会世話人]](https://www.docswell.com/user/6484025)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/P7XV1Q4YJX.jpg?width=480
description: [第11回大阪sas勉強会]
published: April 15, 25
canonical: https://www.docswell.com/s/6484025/KL1648-2025-04-15-051014
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/P7XV1Q4YJX.jpg)

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


# Page. 2

![Page Image](https://bcdn.docswell.com/page/37KQ29Z47D.jpg)

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


# Page. 3

![Page Image](https://bcdn.docswell.com/page/LJ3P4WDD75.jpg)

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


# Page. 4

![Page Image](https://bcdn.docswell.com/page/8JDLQKP27G.jpg)

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


# Page. 5

![Page Image](https://bcdn.docswell.com/page/VEP2LKNLE8.jpg)

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


# Page. 6

![Page Image](https://bcdn.docswell.com/page/27VDQVK67Q.jpg)

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


# Page. 7

![Page Image](https://bcdn.docswell.com/page/5JGYWLQ2JL.jpg)

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


# Page. 8

![Page Image](https://bcdn.docswell.com/page/47QM3YK9EP.jpg)

今後に向けた 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


# Page. 9

![Page Image](https://bcdn.docswell.com/page/KE4V1WKR71.jpg)

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


# Page. 10

![Page Image](https://bcdn.docswell.com/page/L713GYXVEG.jpg)

調査結果（表形式）
方法
症例数
レコード数
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


