サンプルデータ
サンプルから、以下のようなデータセットを作りたいとします。
(Aの値毎に各変数値を横に転置しています。)
今回個人的にハマってるSUMMARYプロシジャで色々調べていたら、海外のSAS Global Forumで発表された方法が面白かったので、この方法で転置してみます。
http://support.sas.com/resources/papers/proceedings10/102-2010.pdf
SUMMARYプロシジャのIDGROUPを使った方法
proc sort data=DT1; by A; run; proc summary data=DT1 ; by A; output out=OUT1 (drop=_TYPE_ _FREQ_) idgroup( out[3] (B C)= );
run;
|
これだけ!
IDGROUPについては以下で紹介しました。
MEANSまたはSUMMARYプロシジャで使えるIDGROUPオプションの紹介
最初、上のリンク記事の例のようにIDGROUPには min(変数) とか max(変数) を書く必要があるのかと思ったらそうでもないんですね!
汎用性をもたせるために、Aのグループ内obs数の最大値を取得して、その数だけ横に並べるようにしたプログラムが以下になります。
※ ただし、制限として1つの変数につき横に並べられるのは100個までとなります。
※ 「by A」を「class A」と書くと、合計行が作られてしまうので、必ず「by A」と書いてください。
MEANSまたはSUMMARYプロシジャで使えるIDGROUPオプションの紹介
最初、上のリンク記事の例のようにIDGROUPには min(変数) とか max(変数) を書く必要があるのかと思ったらそうでもないんですね!
汎用性をもたせるために、Aのグループ内obs数の最大値を取得して、その数だけ横に並べるようにしたプログラムが以下になります。
proc sql noprint; select max(_COUNT) into:_MAX trimmed from (select count(*) as _COUNT from DT1 group by A); quit; proc sort data=DT1; by A; run; by A; output out=OUT2 (drop=_TYPE_ _FREQ_) idgroup( out[&_MAX] (B C)= );
run;
|
※ ただし、制限として1つの変数につき横に並べられるのは100個までとなります。
※ 「by A」を「class A」と書くと、合計行が作られてしまうので、必ず「by A」と書いてください。
0 件のコメント:
コメントを投稿