SAS9.4から追加されたDS2プロシジャについて、基本的な部分からざっくり解説していきたいと思います。
データステップがパワーアップしたようなプロシジャなので、ある程度データステップの動きを知ってる方が理解しやすいです。
私自身勉強中なので、間違いなどがあればご指摘をお願いします。
基本構文
PROC DS2 ; DATA 作成するデータセット ; ~ 処理 ~ ENDDATA ; RUN ;
QUIT ;
|
PROC DS2;
~ QUIT ; |
|
DATA データセット ;
~ ENDDATA ; RUN ; |
|
まずは簡単な例。
例①
*** サンプルデータ作成 *************; data DT1; input A @@; cards; 10 20 30 ;
*** DS2 Procedure **********;
proc ds2;
data _NULL_;
method init();
put '--- 出力開始';
end;
method run();
set DT1;
put '---' A;
end;
method term();
put '--- 出力終了';
end;
enddata;
run;
quit;
ログ --- 出力開始 --- 10
--- 20
--- 30
--- 出力終了
|
「method init()」 とか 「method run()」 とかいうのが出てきて「なんじゃこりゃ、もうやだ!」って感じですが、ここはグッと堪えましょう。
DS2プロシジャでは、基本的にこのメソッドの中に処理を書いていきます。
method init() ;
~ end; |
最初に1回だけ実行したい処理をこのメソッドの中に書く。
|
method run() ;
~ end; |
各オブザベーションを読み込んで実行したい処理をこのメソッドの中に書く。
|
method term() ;
~ end; |
最後に1回だけ実行したい処理をこのメソッドの中に書く。
|
では、もう1歩先に進んだ例を紹介。
例②
*** DS2 Procedure **********;
proc ds2;
data OUT2 (overwrite=yes); keep TOTAL ; method init(); TOTAL = 0; end; method run(); set DT1; TOTAL + A; end; method term(); output; end; enddata; run; quit;
|
ログにWARNINGが出ると思いますが、今は放置しといてください。
解説
まず最初、変数TOTALに、初期値「0」を与えます。
データセットDT1をsetして、変数TOTALに各オブザベーションの変数Aの値を足していきます。
最後に1回だけ、output。
これで、変数Aの合計値を求めたデータセットOUT2が出来ました。
以上終わり、、と言いたいところですが、ここで2つ重要なポイント。
「(overwrite=yes)」 というオプションを入れること!
これは、「すでにOUT2というデータセットが存在する場合、上書きしていいよ」、というオプションです。
つまり、これを指定してないと、上書きできずにエラーになってしまいます。
method init();
TOTAL = 0;end; |
method run();
set DT1; TOTAL + A; end; |
データセットDT1をsetして、変数TOTALに各オブザベーションの変数Aの値を足していきます。
method term();
output; end; |
最後に1回だけ、output。
これで、変数Aの合計値を求めたデータセットOUT2が出来ました。
以上終わり、、と言いたいところですが、ここで2つ重要なポイント。
data OUT2 (overwrite=yes);
|
「(overwrite=yes)」 というオプションを入れること!
これは、「すでにOUT2というデータセットが存在する場合、上書きしていいよ」、というオプションです。
つまり、これを指定してないと、上書きできずにエラーになってしまいます。
keep TOTAL ;
|
データステップの場合だと、keepはどこに書いても問題なかったけど、
DS2プロシジャの場合は、メソッドの外に書かなければいけない。
また、どのメソッドよりも上に書く必要があります。
DS2プロシジャ入門記事
1: 基本構文
2: 変数の宣言
3: 変数属性と配列の定義
DS2プロシジャの場合は、メソッドの外に書かなければいけない。
また、どのメソッドよりも上に書く必要があります。
DS2プロシジャ入門記事
1: 基本構文
2: 変数の宣言
3: 変数属性と配列の定義
0 件のコメント:
コメントを投稿