実戦ではあまり使わない筋なので、ちょっとした遊びです。
今適当なデータセットがあって
data Q1;
X1=1;X2=1;X3=1;output;
X1=.;X2=2;X3=4;output;
X1=3;X2=3;X3=.;output;
run;
指定した変数以外の変数について値を全て99に強制変換せよというのが
課題だとします。
今回はX2の内容はそのままに、それ以外の変数を99にします。
data A1;
if 0 then set Q1;
retain _numeric_ 99;
set Q1(keep=X2);
run;
とこんな感じです。
if 0 then setで変数情報だけ読み込ませているからretainでの指定が活きてくるわけですね。
そのあとにsetすれば、変数があればretainを掻き消すわけですね。
なんというかSASっぽいコードですね。
if _n_=1 then ... というのは良く見かけますが、if 0 then ... というのはどう理解すればいいのでしょう?
返信削除今年もよろしくお願いします!
こちらこそ今年もよろしくお願いします!
返信削除if 0 then は if _N_=0 then など、要は実行されなければ何でもいいのです。
setステートメントがあるとSASはそこで指定されているデータセットの変数情報を先に読み込みます、そこで変数情報だけいただいて、オブザベーションは読み込みません。
変数情報は持っているのでretain _numeric_ 99; の_numeric_の対象がQ1のX1 X2 X3になります。
その後ははじめて、本番のset Q1(keep=X2)なんですが、X2しかないので、X1 X3は先程のretainが効いて全部99になる感じです。
説明が下手ですみません!!
_N_=0という行は無いのに、setステートメントは生きていて変数属性のみ読み込むのですか・・・
返信削除なんとも私には理解しにくいのですが、これまでData Stepを2つ書いていたことが1つで済むのはありがたいです。