0 obsのデータセットにobsを追加する
テンプレートで空のデータセットを使用することはよくあると思います。
このプログラムで作成されるテンプレートデータセットを使って
data a; length a b c 8; delete; run;
こんな結果データセットを作成したいときはどうすればいいでしょうか。
単純に
data b; set a; a=1;b=2;c=3; output; run;
ではダメです
こんなログが出ちゃいます。
SETステートメントは、ファイル終端を検知した時点で処理を終了する、という動作をします。
そのため、0obsのデータセットを読み込むと、その時点で後続の処理は一切無視して終了します。
ではどうするか。
簡単なのはダミーデータセットをかませる方法です。
data _dummy_; a='X'; output; run; data b; set a _dummy_(drop=_all_); a=1;b=2;c=3; output; run;
通常であれば最初に読み込むデータセットの変数属性が優先されますが、ダミーデータセットのすべての変数をdropしているので、ダミーデータセットの変数名は何でもOKです。
何なら、setステートメントの最初に指定してもOKです。
もし、dataステップで記述する変数がすべて数値変数なら
data b; a=1;b=2;c=3; output; set a; run;
こんな書き方でもOKです。
setステートメントでデータセットを読み込む前にoutputしちゃうわけです。
ただし、「 a=1;b=2;c=3;」の時点では変数の定義がありませんから、文字変数等の場合は変数長が意図しないものになるため、使えません。あくまでも数値変数限定です。
テンプレートデータセットにDATAステップで手動でデータを埋め込む際には注意しておきたいところです。