「DATAステップビューの作成と落とし穴①」の続き。
DATAステップビューで参照しているデータセットは、途中で変数を増やしたり減らしたり、属性情報(LENGTHや変数ラベル等)を変更したりするのはNGです。
以下の例では、データセットDT2をSETするという単純なDATAステップビューDSVIEW2を作成しています。
data DT2; length X $2.; X = "aa"; run; data DSVIEW2 / view=DSVIEW2; set DT2; run; |
ここで、DT2を以下青文字の通り、作り直してみます(変数XのLENGTHを5に増やして"bbbbb"という値を格納)
そして、このDT2を参照しているDATAステップビューDSVIEW2をPROC PRINTで出力してみます。
あれ?Xには "bbbbb" が格納されているはずなのに、"bb"と出力されていて文字切れを起こしている??
(DATAステップビューが作成された時の変数XのLENGTHは「2」だったのでそれが適用された)
例えば、システムオプション「FIRSTOBS=」や「OBS=」がそれにあたります。
まずは、システムオプションの「FIRSTOBS=」・・・ではなくデータセットオプションの「FIRSTOBS=」を使った場合の例。
データセットオプションで「firstobs=10」としてるので、PROC PRINTでの出力時にオブザベーション=10から処理が開始されています。これは想定通りです。
では次、システムオプションの「FIRSTOBS=」を使った場合。
「options firstobs=10;」で以降の処理の開始をオブザベーション=10からにしています。
- まずはPROC PRINTでDATAステップビューを参照した際、ビューに保存されたプログラムが動くので、その時にオブザベーション=10から処理が行われます
- そのビューの結果に対してPROC PRINTを実行する際にも、オブザベーション=10から処理が行われます
つまり、FIRSTOBS=システムオプションが2回適用されちゃったわけですね。。
(話それますが、FIRSTOBS=オプションは以下の落とし穴もあって、取り扱い注意)
- 「DATAステップビューはデータセットと違い実態がない」という事に起因して、一部のデータセットオプションが効かない事もあるので、動作について検証が必要です
- DATAステップビュー内に記述した「&X」みたいなマクロ変数は展開された上で保存されます
0 件のコメント:
コメントを投稿