ラベル XPT の投稿を表示しています。 すべての投稿を表示
ラベル XPT の投稿を表示しています。 すべての投稿を表示

2017年2月20日月曜日

SASデータセットをXPTファイルに変換する方法




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は使用しないこと」という記述があるのでご注意ください。