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

2019年7月9日火曜日

「_NULL_の活用」PROC SORT編




以前「_NULL_」について紹介しました。
https://sas-boubi.blogspot.com/2016/04/data-null.html



「_NULL_」のちょっとしたテクニックとして、私は以下のような使い方をすることがあります。

* sample data ;
data test;
input a;
cards;
1
2
2
3
;

* _null_ を使う ;
proc sort data=test nouniquekey out=_null_ uniqueout=out1;
    by a;
run;


NOUNIQUEKEYについては以下の記事をご覧ください。
https://sas-boubi.blogspot.com/2014/03/sort.html




ポイント
  • 今回の例では「out=」に出力されるデータセットが別に要らなかったので「out=_null_」として出力しないようにしてます。
  • (もし「out=」を省略すると、「data=」に指定したデータセットに直接上書きしてしまうので、それの予防措置)



実は以前書いた記事でもこのテクニックを使ってます。
https://sas-boubi.blogspot.com/2019/06/blog-post.html



2016年4月18日月曜日

0オブザベーションのデータセットを作る方法 【まとめ】


変数属性だけ定義した0オブザベーションのデータセットを作る方法をまとめてみます。


①STOP
data DT1;
    set SASHELP.CLASS;
    stop;
run;

STOPステートメントでオブザベーションが出来る前に処理を停止させてしまう。


② OBS=
data DT2;
    set SASHELP.CLASS (obs=0);
run;

OBS=オプションで読み込むオブザベーション数を指定できます。


③ IF 0
data DT3;
    if 0 then set SASHELP.CLASS;
    stop;
run;

「if 0 then」 の 「0」 は 「false」 の意味になり、then以降の 「set SASHELP.CLASS」 の部分は実行されません。
。。のはずですが、たとえ実行されなくてもデータセット名の指定があると、コンパイル時にそのデータセットの定義情報だけを読み込みにいきます。
①とほとんど同じ方法ですが、こちらの方が内部的に余計な処理が入らないのでスマートです。


④ SET _NULL_;
data DT4;
    set SASHELP.CLASS;
    set _null_;
run;

http://sas-boubi.blogspot.jp/2016/04/data-null.html
http://sas-tumesas.blogspot.jp/2013/10/1obs.html(データステップ100万回)

新手かも。


⑤ WHERE 0
data DT5;
    set SASHELP.CLASS;
    where 0;
run;

この方法も見かけた事ないかも。


⑥ SQL
proc sql;
    create table DT6 like SASHELP.CLASS;
quit;

http://sas-tumesas.blogspot.jp/2013/10/blog-post.html(データステップ100万回)


2016年4月15日金曜日

「DATA _NULL_」 について。




以下の構文で、データセットを作らずにデータステップが実行できます。

DATA _NULL_;

      ~ なんかの処理 ~

RUN;

「データステップを実行したいけど、データセットへの出力は不要」という場合に使えます。




単純な例ですが、以下はデータセットSASHELP.CLASS の特定の変数値をログに出力する例です。

data _null_;
      set sashelp.class;
      put name sex age;
RUN;

ログに出力するだけで、データセットを作りたいわけじゃないんで、「_NULL_」 を使用しています。



ちなみに以下の文もエラーなく通ります。

* 何もPRINTしない ;
proc print data=_null_;
run;

* 何もSETしない ;
data dt1;
  set _null_;
run;

あんまり役に立つ例が思いつかないですが、マクロに組み込んだりすれば便利そうです。


ひとつ知ってるのが、0オブザベーションのデータセットを作りたい時に大体以下のように書くと思いますが、、

data empty;
   stop;
run;


何かの本で、

data empty;
   set _null_;
run;

と書いてる面白い例を見たことがあります。
なんかかっこいい書き方ですね。


他に何かアイディアとか、こういう時使ったという例があったら、教えてほしいです。