ラベル プロシジャ: COPY の投稿を表示しています。 すべての投稿を表示
ラベル プロシジャ: COPY の投稿を表示しています。 すべての投稿を表示

2020年3月11日水曜日

PROC COPY の「OVERRIDEオプション」がいい感じ





とにかくこのプログラムを見てほしい。

proc copy in=sashelp out=work override=(keep=name age);
    select class;
run; 



  • SASHELP.CLASSをWORKにコピーしています。
  • OVERRIDE=オプションで、出力データセットに対して変数NAMEとAGEのみをKEEP



こんな感じで、
OVERRIDEオプションは、出力データセットに対して、データセットオプションを設定出来ちゃうんです。




このオプションの面白いところは、以下のような感じで、、

proc copy in=sashelp out=work override=(rename=(weight=wei));
    select class cars;
run;


出力データセットが複数ある場合、そのすべてのデータセットに、データセットオプションを適用できちゃうところ。



こういう、複数のデータセットに一括でオプションを適用するのって、確か他のプロシジャでは出来ないはず。
アイディア次第では結構便利でもあるし、コピーするついでにって感じで、かなり強力な機能だと思いました。



2017年7月4日火曜日

【PROC COPY】データセットを他のライブラリに一括コピー




PROC COPYでデータセット, ビュー, カタログ等のSASデータをコピーする事が出来ます。


📝
ただし「システムオプション等の環境を変更せずに、通常のライブラリから通常のライブラリにSASデータセットをコピー」する分には問題なさそうですが、それ以外では何やら沢山の制限や注意点があるっぽいので、リファレンスをご確認下さい。



構文


   PROC COPY
       IN                =   コピー対象のライブラリ
       OUT            =   出力先のライブラリ
       MEMTYPE  =   (コピー対象のデータのタイプ) ;

       SELECT     コピー対象のデータ ;
       EXCLUDE  コピー対象外のデータ ;
   RUN;


  • MEMTYPE = には以下などが指定可(一部)
  • DATA          …    データセット
    CATALOG   …   カタログ
    VIEW          …    ビュー
  • SELECT・EXCLUDEステートメントを省略すると「MEMTYPE=」に指定したタイプの全データがコピー対象になる
  • 出力先に同名のデータが存在する場合は、上書きされる。


例

では例を見ていきましょう。
まずは適当にコピーするデータセットを準備。

data DT1 DT2 DT3;
  A=1;
run;



例① WORK の全データセットを MYLIB にコピー
libname MYLIB "C:\TEST";

proc copy in=WORK out=MYLIB memtype=(data);
run;


例② WORK のデータセット DT1,DT2 を MYLIBにコピー
proc copy in=WORK out=MYLIB memtype=(data);
  select DT1 DT2;
run;


例③ WORK のデータセット DT3 以外の全データセット を MYLIBにコピー
proc copy in=WORK out=MYLIB memtype=(data);
  exclude DT3;
run;


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