SASデータセットをXPT(XPORT)という移送形式ファイルに変換する方法。
今回のサンプルデータ
MYSASというライブラリを作り、そこにデータセットADSLを格納しときます。
libname MYSAS "適当なパス";
data ADSL (label="SUBJECT LEVEL ANALYSIS DATASET");
USUBJID="aaa";
run;
proc sort data=ADSL out=MYSAS.ADSL;
by USUBJID;
run; |
XPTファイルに変換するプログラム
以下プログラムを実行するとログにWARNINGが出るかもしれません。
「制限事項」のとこで補足説明してるので今は無視してください。
libname MYXPT xport "XPTファイルを格納するパス\adsl.xpt";
proc copy in=MYSAS out=MYXPT memtype=data;
select ADSL;
run;
|
- libnameでXPTファイルを格納するライブラリ参照を定義。ここではXPTファイル名を含むフルパスを指定する。
- proc copyでMYSAS.ADSLをライブラリMYXPTに格納。
制限事項
SASデータセットがSORTプロシジャでソートしてある場合、内部的にSORT情報が保持されており、この状態でXPT変換すると以下のようなWARNINGが表示されます。
proc sort data=MYSAS.ADSL;
by USUBJID;
run;
libname MYXPT xport "XPTファイルを格納するパス\adsl.xpt";
proc copy in=MYSAS out=MYXPT memtype=data;
select ADSL;
run;
ログ
WARNING: エンジンXPORTはSORTEDBY処理をサポートしていません。SORTEDBY情報はコピーできません。
|
ログに出てる通り、XPTではSORT情報が持たせられません。
WARNINGは出ているけどSORT情報がなくなっただけでXPTファイルはちゃんと出来ています。
このWARNINGが嫌であれば、この記事の最初のMYSAS.ADSLを作るプログラムのとこでSORTプロシジャにSORTEDBYオプションを追記すると、SORT情報を消すことができます。
proc sort data=ADSL out=MYSAS.ADSL (sortedby=_null_);
by USUBJID;
run; |
out=にこのオプションを指定するのがポイントです。
その他の制限。
- 変数名は8文字以内
- 変数ラベルの長さは40まで
- データセットラベルも長さ40まで・・・など
製薬業界でのCDISC絡みの話。(2017/02/17現在での話)
CPORTプロシジャでも移送ファイル(CPTファイル)に変換できますが、
PMDAからでてる「技術的ガイドについて」という通知には「CPORT Procedureは使用しないこと」という記述があるのでご注意ください。