文字列が8バイト以上ある変数でTRANSPOSEプロシジャを利用する
[OS]ALL
[リリース] 6.12, 8.1, 8.2
[キーワード] TRANSPOSE, ID, IDLABEL, VARIABLE
[質問]1レコードが複数行にまたがるデータを入力し、TRANSPOSEプロシジャを利用して1行ずつのレコードにまとめる事を考えています。しかし、転置のキーとなる変数が8バイトより長く、8バイト以下の長さでは値が重複してしまい、うまく転置がされません。また、該当する変数をLABELとして設定したいのですが、8文字で切られているために思うような結果になりません。何か回避方法はありますでしょうか。 データの例: aaaaaaaaa 02/02/27 koumoku9 09123456789 aaaaaaaaa 02/02/27 koumoku10 10123456789 aaaaaaaaa 02/02/27 koumoku11 11123456789 bbbbbbbbb 02/02/27 koumoku9 09234567890TRANSPOSE後のイメージ: INPUT_DATA_GRP DATE koumoku9 koumoku10 koumoku11 aaaaaaaaa 02/02/27 09123456789 10123456789 11123456789 bbbbbbbbb 02/02/27 09234567890
[回答]
SAS System 6では、変数名の長さは8バイトまでの制約があります。そのため、質問のようにSAS System 6のTRANSPOSEプロシジャにおいても、IDおよびIDLABELに指定可能な変数は8文字までとなっています。ただし、設定したい変数をいったんユニークな8文字以内の別の変数に保管し、その変数をIDとして使用することにより、同等の機能を実現できます。 /* TESTデータ作成 */ DATA testtr; LABEL a = 'input_data_grp' b = 'input_data_date' c = 'input_data_koumoku' d = 'input_data_count' ; FORMAT a $9. b yymmdd8. c $9. d $12. ; INPUT @1 a $9. @11 b yymmdd8. @20 c $9. @30 d 12. ; DATALINES; aaaaaaaaa 02/02/27 koumoku9 09123456789 aaaaaaaaa 02/02/27 koumoku10 10123456789 aaaaaaaaa 02/02/27 koumoku11 11123456789 bbbbbbbbb 02/02/27 koumoku9 09234567890 ; RUN; /* ユニークな8バイト以内の別変数を作成 */ DATA testtr1; SET testtr; e = COMPRESS(SUBSTR(c,1,3)||SUBSTR(c,6,4)) ; RUN; /* IDへユニークな別変数を指定 */ PROC TRANSPOSE DATA=testtr1 OUT=trans1(DROP=_name_) ; BY a b ; ID e ; IDLABEL c ; VAR d ; RUN; |