|
|
文字列が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;
|
|||||