0 オブザベーションのデータセットに対して、data ステップを実行したい! - SAS
去年、 特定のformatに対して処理をしたい - SAS という記事を書いたのだけど、「あれ、このコード、対象のデータセットが 0オブザベーションだと処理されないんじゃ・・・・」ということに気づきました。ずっと、解決する方法を模索していたのですが、ようやく解決方法が1つ思いついたので(ちょっと無理矢理感がある方法ですが)、記事にしてみたいと思います。 下記に、0オブザベーションのデータセットを実行するための、コードを記載しています。 /* テスト用データセット */ proc sql ; create table TEST ( NUM DECIMAL format=10. ,DT DECIMAL format=date9. ,STR CHAR(10) ) ; quit ; /* 1オブザベーションのデータセット */ data KARA ; KARA=. ; run ; data TEST ; set TEST KARA(in=SW drop=KARA) ; putlog "◆◆◆◆◆ 実行されたよ! ◆◆◆◆◆" ; /* オブザベーションが追加されないように削除します */ if SW then delete ; run ; まず、proc sql の create table で 0 オブザベーションのデータセット TEST を作成します。その次に、1オブザベーションのデータセットを作成します。このデータセットの名前や変数はテキトーでいいです。 最後のdataステップが本題です。データセット TEST は 0オブザベーションですが、データセット KARA は 1オブザベーションあるので、ステップ内が1回実行されます。最後に、空のオブザベーションが、データセット TEST に追加されないように delete で削除しておきます。 今回の目的ではありませんが、この方法なら、全変数欠損値のオブザベーションも作れますね。 特定のformatに対して処理をしたい - SAS にて、記載したコードの改良版は、以下のようになります。 data TEST ; set TEST KARA(in=SW drop=KARA) ; ...