outputでデータセットを1オブザベーションずつ作る

ぱっとテストデータやダミーデータ等、割とどうでもいいデータセットを作りたいとき、
input cardsでデータを作るのが面倒で、僕は

data A0;
X='い';output;
X='ろ';output;
X='は';output;
run;

という書き方をよくします。SASの公式なテキストか何かでも、見たことがあるので、必ずしも筋悪ではないのかもしれません。
一行分の変数に値を割り当てるごとにoutputでオブザベーションを起こしています。
1行書いたらコピペして値を変えるだけなので、小さいデータセットだととても楽です。

ただ、よくあるのが

data A1;
X='い';output;
X='ろ';output;
X='いろは';output;
run;

みたいに書いてしまうと、







最初に格納される値で自動的に長さが設定されてしまうので、LENGTHが$2になり
3行目の値 'いろは' が文字切れします。手抜きするなら1行目に一番長い文字をあてればいいですが、まあ、素直にlengthステートメントうてばいいですね。


さて、ちょっとした問題ですが

data A2;
X=1;Y='A';Z='い';output;
X=2;Y='B';output;
X=3;output;
run;

を実行すると結果はどうなるでしょうか??


3行目のY、2・3行目のZが欠損値になると思った方は残念ながら不正解です。







新たに値を入れない限り、未割当の変数は、保持されます。







0 件のコメント:

コメントを投稿