SASマクロ自動生成とAI活用 ― ChatGPT・Claudeで製薬業務を効率化する実践ガイド ―

- SASマクロの基本概念と製薬業務での役割
- AIを使ってSASマクロを効率よく生成するためのプロンプトの書き方
- ChatGPT・Claude・Gemini別のSASマクロ生成品質の違い
- 記述統計・MMRM・AE集計など実務でよく使うマクロの活用例(SASコード付き)
- AI生成マクロを実務で安全に使うための検証ポイント
記事の目次
Toggleはじめに
前回の記事「AIプログラム作成比較:SASとRでMMRMを実装するならどのAI?」では、ChatGPT・Claude・Gemini・GitHub Copilotの4つのAIを比較し、SASコードの精度においてはChatGPTとClaudeが一歩リードしているという結論を紹介しました。
今回はその続きとして、「SASマクロの自動生成」に焦点を当てます。
SASマクロは、コードの繰り返しを減らし、複数のデータセットや解析条件に対して同じ処理を効率的に実行するための仕組みです。製薬企業では、複数の評価項目・Visit・治療群に対して同一のMMRM解析を走らせる場面が日常的にあり、マクロの設計品質が業務効率と解析の再現性に直結します。
しかし、SASマクロの作成は構文の複雑さもあり、経験が浅い担当者には難易度が高い作業です。そこで、AIを活用してSASマクロを自動生成し、実務に組み込む方法を体系的に解説します。
SASマクロとは:実務担当者のための基本整理
SASマクロとは、%macro 〜 %mend で定義されるコードの再利用単位です。変数化(マクロ変数)によってデータセット名・変数名・解析オプションなどを動的に切り替えられるため、ひとつのマクロで複数の解析シナリオに対応できます。
製薬業界でよく使われるSASマクロの代表例は以下の通りです。
| マクロの種類 | 主な用途 | よく使うPROC |
|---|---|---|
| 記述統計マクロ | 人口統計学的背景・ベースライン特性の集計 | PROC MEANS / PROC FREQ |
| 有効性解析マクロ | MMRM・ANCOVA等の主要評価項目解析 | PROC MIXED / PROC GLM |
| 安全性解析マクロ | 有害事象(AE)の発現率集計・SOC/PT別表 | PROC FREQ / PROC REPORT |
| 出力整形マクロ | RTF・PDF形式の統計解析報告書(CSR)出力 | PROC REPORT / ODS |
| データ加工マクロ | ADaM形式への変換・フラグ付け | DATA step / PROC SQL |
AIへの効果的なプロンプトの書き方
AIに高品質なSASマクロを生成させるためには、プロンプトの設計が最も重要です。漠然とした指示では、製薬業務の要件を満たさない汎用コードが生成される可能性があります。
- 目的と用途:何のためのマクロか(例:臨床試験のMMRM解析)
- 入出力の仕様:マクロ引数・入力データの形式・出力先
- 統計手法の要件:使用するPROC・オプション(例:Kenward-Roger法)
- 業界標準への準拠:ICH E9・CDISC ADaMなどへの対応
- エラー処理:引数チェックや欠損時の処理
製薬企業の臨床試験における有効性解析用のSASマクロを作成してください。
要件:
- PROC MIXEDを使ったMMRM(反復測定混合モデル)解析
- マクロ引数:データセット名、目的変数、時点変数、治療群変数、ベースライン変数、被験者ID、共分散構造(デフォルト:UN)、出力データセット名
- 自由度の計算はKenward-Roger法を使用(ddfm=kr)
- 共分散構造はUN(非構造化)をデフォルトとし、CS・ARH(1)にも対応
- LSMeansおよびDiffをODSで出力データセットに保存
- ICH E9準拠の解析を想定
- マクロ引数が未指定の場合にERRORログを出力する検証付き実務活用例1:記述統計マクロ
最もシンプルな活用例として、ベースライン特性表(Table 1)を自動生成するマクロを紹介します。以下はChatGPT(GPT-4o)に上記の要領でプロンプトを与えて生成し、実務向けに整理したコードです。
/* マクロ名 : %summary_cont
用途 : 連続変数の記述統計(n, 平均, SD, 最小, 最大) */
%macro summary_cont(data=, var=, by=, out=);
%if %length(&data) = 0 %then %do;
%put ERROR: [summary_cont] data= が指定されていません。;
%return;
%end;
%if %length(&var) = 0 %then %do;
%put ERROR: [summary_cont] var= が指定されていません。;
%return;
%end;
proc means data=&data noprint;
%if %length(&by) > 0 %then %do;
class &by;
%end;
var &var;
output out=&out(drop=_TYPE_ _FREQ_) n= mean= std= min= max= ;
run;
%mend summary_cont;
/* 呼び出し例 */
%summary_cont(data=adsl, var=age weight bmi, by=trt01p, out=out_baseline);このマクロは
PROC MEANSのOUTPUTステートメントを活用し、複数の連続変数をまとめて集計します。by=引数を省略した場合は全体集計、指定した場合は治療群別の集計となります。%length()関数による引数チェックにより、必須引数の未指定時にERRORメッセージをログに出力するため、デバッグが容易になります。%sysfunc(tranwrd(...))を使った出力変数名の自動生成は、変数名が長くなるとSASの32文字制限に引っかかることがあります。変数名が長い場合は出力変数名を明示的に指定してください。実務活用例2:MMRMマクロ(前回記事の続き)
前回の記事でMMRM解析のコードを各AIで比較しましたが、今回はその解析をマクロ化します。複数の評価項目に対して同じMMRM解析を繰り返す場合、マクロ化することで保守性と再現性が大幅に向上します。
/* マクロ名 : %run_mmrm
用途 : MMRM(反復測定混合モデル)解析の実行 */
%macro run_mmrm(data=, dep=, time=, trt=, baseline=, subject=, cov_type=UN, out=mmrm_out);
%let _err = 0;
%if %length(&data) = 0 %then %do; %put ERROR: data= が未指定です。; %let _err = 1; %end;
%if %length(&dep) = 0 %then %do; %put ERROR: dep= が未指定です。; %let _err = 1; %end;
%if %length(&time) = 0 %then %do; %put ERROR: time= が未指定です。; %let _err = 1; %end;
%if %length(&trt) = 0 %then %do; %put ERROR: trt= が未指定です。; %let _err = 1; %end;
%if %length(&subject) = 0 %then %do; %put ERROR: subject= が未指定です。; %let _err = 1; %end;
%if &_err = 1 %then %return;
proc mixed data=&data method=reml;
class &trt &time &subject;
model &dep = &baseline &trt &time &trt * &time / ddfm=kr s;
repeated &time / subject=&subject type=&cov_type r rcorr;
lsmeans &trt * &time / diff cl alpha=0.05;
ods output lsmeans=&out._lsm diffs=&out._diff covparms=&out._covp;
run;
%mend run_mmrm;
/* 呼び出し例 */
%run_mmrm(data=adqs_hamd, dep=chg, time=avisitn, trt=trt01p,
baseline=base, subject=usubjid, cov_type=UN, out=hamd_mmrm);ddfm=kr(Kenward-Roger法)は、反復測定データにおける自由度の調整に推奨される方法であり、ICH E9(R1)やFDA統計ガイダンスでも参照されています。type=UN(非構造化共分散)は最も柔軟な共分散構造ですが、Visit数が多い場合は推定パラメータ数が増大するため、収束の確認が必要です。実務活用例3:有害事象(AE)集計マクロ
有害事象(Adverse Event)の集計は安全性解析の中心です。SOC・PT別に発現件数・発現率を集計するマクロをAIに生成させた例を紹介します。
/* マクロ名 : %ae_incidence
用途 : AE発現率の集計(SOC・PT別) */
%macro ae_incidence(data=, soc=, pt=, trt=, n_trt=, out=ae_out);
proc sort data=&data out=_ae_sort nodupkey;
by usubjid &trt &soc &pt;
run;
proc freq data=_ae_sort noprint;
tables &trt * &soc * &pt / out=_ae_freq(drop=percent);
run;
proc sql;
create table &out as
select a.&trt, a.&soc, a.&pt,
a.count as n_event, b.n_subj as n_total,
round(a.count / b.n_subj * 100, 0.1) as pct
from _ae_freq a inner join &n_trt b on a.&trt = b.&trt
order by a.&soc, a.&pt, a.&trt;
quit;
proc datasets lib=work nolist; delete _ae_sort _ae_freq; quit;
%mend ae_incidence;
/* 呼び出し例 */
%ae_incidence(data=adae_trtemer, soc=aebodsys, pt=aedecod,
trt=trt01p, n_trt=n_by_trt, out=ae_summary);nodupkeyオプションで同一被験者が同じPTを複数回報告している場合を1件としてカウントします(被験者ベース集計)。PROC SQLでN数データセットとJOINすることで発現率(%)を計算しており、round(..., 0.1)により小数点第1位での丸め処理が行われます。AI別のSASマクロ生成品質の比較
前回記事のMMRMコード比較に続き、SASマクロ生成においても各AIの特徴を整理します。
| AIツール | SASマクロ精度 | 製薬要件への対応 | 引数チェック・エラー処理 | 総合評価 |
|---|---|---|---|---|
| ChatGPT (GPT-4o) | ★★★★★ | ★★★★☆ | ★★★★★ | ◎ 最も安定 |
| Claude (Sonnet/Opus) | ★★★★★ | ★★★★★ | ★★★★☆ | ◎ 仕様理解が深い |
| Gemini (1.5 Pro) | ★★★☆☆ | ★★★☆☆ | ★★☆☆☆ | △ 構文エラー注意 |
| GitHub Copilot | ★★★★☆ | ★★★☆☆ | ★★★★☆ | ○ エディタ連携が強み |
ChatGPTは詳細な引数チェック・コメントを含んだ構造化されたマクロを生成しやすく、Claudeは長い仕様書を渡した際の理解精度が高く、ICH E9準拠など製薬業界固有の要件を忠実に反映する傾向があります。前回記事同様、Geminiは構文エラーが発生するケースがあるため、必ず実行テストが必要です。
実務でのポイント
- 必ずサンプルデータで動作検証を行う:生成されたコードをそのまま本番データに適用しない。
- ログを必ず確認する:ERRORだけでなくWARNINGも見逃さない。SASのWARNINGは統計的に重大な問題を示すことがある。
- 統計的妥当性の最終判断は自分で行う:AIはコードを生成するが、共分散構造の選択・自由度法の妥当性判断は生物統計家の責任範囲。
- バージョン管理を行う:AIで更新したマクロは変更内容・日付・担当者をコメントに記録し、社内のバージョン管理システムで管理する。
- マクロのプロンプトも資産として保存する:再現性のために、使用したプロンプト・AIツール名・バージョンを記録しておく。
また、AIで生成したSASマクロをCSR(臨床試験総括報告書)の解析プログラムとして使用する場合は、社内のSOP(標準業務手順書)に沿ったバリデーションプロセスが必要です。AIはコード作成を大幅に効率化しますが、規制申請に用いる解析の品質保証は従来通り生物統計家が担うという認識を忘れないことが極めて重要です。
📚 この記事をより深く理解するための参考書籍
SASマクロと製薬統計解析をさらに深く学びたい方に、おすすめの書籍をご紹介します。
『臨床試験のデザインと解析 薬剤開発のためのバイオ統計 (バイオ統計シリーズ)』角間辰之 近代科学社
本記事で紹介したMMRMマクロやAE集計マクロが実際の臨床試験のどのフェーズで使われるかを体系的に理解できます。ICH E9ガイドラインに準拠した統計解析の観点からも参照できる定番書です。
関連記事・次のステップ
- 前回記事:AIプログラム作成比較:SASとRでMMRMを実装するならどのAI?
- 関連記事:mmrm(反復測定混合モデル)の統計理論については「mmrmとは何か ― 臨床試験での活用とRによる実装」をご覧ください。
まとめ
本記事では、AIを使ったSASマクロの自動生成と実務活用例を紹介しました。
記述統計マクロ・MMRMマクロ・AE集計マクロの3つの実例を通じて、AIが生成するSASコードの実用性と、製薬業務に組み込む際の要点を整理しました。ChatGPTとClaudeはSASマクロ生成においても高い精度を示しており、適切なプロンプト設計と組み合わせることで、業務効率を大幅に改善できます。
一方で、AIが生成したコードは統計的妥当性の検証なしに実務に使うことはできません。AIはコード作成のパートナーであり、最終判断の主体はあくまで生物統計家自身であるという姿勢が、規制申請を含む製薬業務においては特に重要です。
AIツールの進化と生物統計家としての専門知識を組み合わせることで、より高品質な解析を効率的に実現していただければと思います。
次回は、AIを使ったADaMデータセット作成の効率化について紹介します。SASマクロとAIを組み合わせてADLB・ADQSなどのADaMドメインを自動生成する方法を実践的に解説する予定です。






