【解答求む】フォーマットがついた変数を新規変数に割り当てても解除される話

今更ながら、とても基本的な部分で質問なのですが
たとえば、以下のようなデータセットがあって

data Q1;
 X=18993;
 format X yymmdds10.;
run;





Xは数値で、日付フォーマットがついてます。

data A1;
 set Q1;
 Y=X;
run;

とすると





YにXの値が割り当てられますが、フォーマットは継承されません。

YにもXと同じフォーマットをあてたい時

data A1;
 set Q1;
 Y=X;
 format Y yymmdds10.;
run;

としてました。

まあ、同じ内容の変数を1つのデータセットの中に作る処理なんて、意味ないのでほぼやったことないせいですが、今までこのことに疑問を感じたことはありませんでした。

これって他にやりようないのでしょうか?
フォーマットを継承するオプションや関数をご存じの方がいらっしゃればご教示いただきたいです。


なぜ、そんなことをいまさら思ったのかというと
例えば、同じような処理でも

proc sql noprint;
 create table A2 as
  select X 
        ,X as Y
    from Q1
    ;
quit;

とすると





となってフォーマットは継承されているわけです。ただ、この場合は、割り当てているのではなく
変数Xをコピーしてをリネームしているという感じなので、フォーマットが同じで当たりまえといえば
当たり前なわけです。継承しているとはいわないでしょう。


じゃあ、その理屈でいくならばと思って以下のようにすると

data A3;
 set Q1;
 set Q1(rename=(X=Y));
run;





できました。
できましが、これ、変数追加するためだけに2回セットしてて、効率悪いですよね。

こんなことばかり、いつも思いついては、考え込んでしまいます






0 件のコメント:

コメントを投稿