【SAS】文字列連結③ CATX関数の活用例【連結する変数の数が定まっていないとき】
連結する変数の数が決まってるなら連結演算子(||)でも可能だけど、決まってないときはCATX関数が活用できる。
例えば以下のようなとき。
元データのほうは、それぞれの人が何個かずつ買うものがあって、その数の分だけレコードをもつ。それを、1人1レコードにまとめたい。
/*元データ作成*/ data sample1; length id 8. name item $10.; input id name$ item$; label item='買うもの'; datalines; 1 Rose Book 1 Rose Pen 1 Rose Stapler 2 Nicole Scissors 2 Nicole Glue 2 Nicole Notebook 2 Nicole Book 3 Stephen Ruler 3 Stephen Scissors 4 Teresa Glue 4 Teresa Notebook 4 Teresa Book 4 Teresa Ruler 4 Teresa Scissors 5 Brenda Pen 5 Brenda Notebook ; run;
/*変数idでソート*/ proc sort data=sample1; by id; run;
/*新しい変数「shoppinglist」を作成*/ data sample2; set sample1; by id; length shoppinglist $500.; label name='名前' shoppinglist='買い物リスト'; retain shoppinglist; *そのidの1オブザベーション目のときは、itemの値をそのままshoppinglistに入れる; if first.id then shoppinglist=item; *1オブザベーション目でないときは、shoppinglistの値とitemの値を「/」で結合してshoppinglistに入れる; else shoppinglist=catx('/',shoppinglist,item); *そのidの最後のオブザベーションのときはoutputした後shoppinglistに欠損値を入れる; if last.id then do; output; call missing(of shoppinglist); end; keep id name shoppinglist; run;
- 作ったデータセットの中身をPRINTプロシジャで表示してみると以下のようになる
proc print data=sample2 label; run;