TRANSPOSEプロシジャのCOPYステートメントを使って、総当たりの対戦表を作ってみる

たとえば
 
data Q;
do TEAM='A','B','C','D','E';
 output;
end;
run;
 
 
のようなデータがあったとします。
 
そこに、
 
proc transpose data=Q out=Q1(drop=_NAME_) prefix=TEAM_;
 var TEAM;
 copy TEAM;
 id TEAM;
run;
とすると何がおきるでしょうか?
 
transposeプロシジャのcopyステートメントは
あまり活躍の機会の少ないステートメントです。
 
こいつに指定された変数は、元のデータセットのデータを保持します。
しかし、BYとは違って、ただそのままであるだけです。
 
つまり結果は
 
 
となります。
 
面白いですが、このような形の結果を求めることが少ないです。
 
今回はチームAからチームEまでが総当たりで対戦をする場合の
星取り表を作るプログラムとして使ってみました。
 
上の結果に少し手を加えて
 
 data ANS;
  set Q1(in=ina where=(TEAM_A^=''))
      Q1(in=inb);
  if ina then TEAM='';
  if inb then call missing(of TEAM_:);
  label TEAM='対戦表';
run;
以下が完成です。
 
 
 
 
社内イベント等で対戦表をつくることがあれば
あえて、SASでやってやりましょう。
きっとEXCELよりもめんどくさいうえに
誰も褒めてはくれないでしょう。
 
 
 
 
 

0 件のコメント:

コメントを投稿