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; |
以下プログラムを実行するとログに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; 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まで・・・など
CPORTプロシジャでも移送ファイル(CPTファイル)に変換できますが、
PMDAからでてる「技術的ガイドについて」という通知には「CPORT Procedureは使用しないこと」という記述があるのでご注意ください。
proc sort data=ADSL out=MYSAS.ADSL (sortedby=_null_);
返信削除by USUBJID;
run;
これだと USUBJIDでソートされちゃうので、sort情報が残っちゃう気がします。
面倒でも、sortした後に
data MYSAS.ADSL;
set MYSAS.ADSL;
run;
が必要ではないでしょうか。
じゅぺさん、コメント有難うございます。
削除USUBJIDでソート後に出力する際、
out=MYSAS.ADSL (sortedby=_null_)
これで「出力データセットMYSAS.ADSLからsortedby(ソート情報)を消してください」という指令になります。
先程再検証してみて、proc copyでXPT変換してみたところ、WARNINGも無くまりました。
記事に色々わかりづらい部分などダメダメな部分があったので修正しました。
また何かお気づきの点がありましたらコメントお願いします!
いつも参考にさせていただいたおります。
返信削除XPORTエンジンを使って、XPTに変換する際に、フォーマットカタログも変換できるのでしょうか?
XPTに変換する、元データセットにはフォーマットが当てられていることが多いかと思いますが、そのような場合にはどのように対応されていますでしょうか?
コメント有難うございます。
削除以下URLの説明みると、XPT変換はデータセットしかサポートされていないみたいです。
http://www.sas.com/offices/asiapacific/japan/service/technical/howto/transport02.html
フォーマットカタログも対応しているPROC CPORT使ってCPTファイルを作成するっていう手もありますが、質問者さんの用途にもよるかなと思います。。
(CDISC対応では、PROC CPORTは使っちゃダメなので)