受け取ったSASデータセットが開けない。
繰り返されるよくある話で、原因はいろいろ咲き乱れですが、
ログやエラーメッセージからだいたい原因はわかります。
フォーマットをロードできないとかでてたら、フォーマット参照の指定を忘れていたらfmtsearchで
指定。フォーマットがなぜかないならnofmterrでとりあえず開けます。
OS等、プラットフォームの違いによるものであればCPORTプロシジャでカタログ移送形式に変換して
からデータを貰って、CIMPORTで戻しましょう。
実は最近、SASデータセットを受け取って、そこからWORKにコピーしようとしたら
とメッセージがでて、移動できなかったんですね。
ダブルクリックで開こうとしても同じメッセージが出て、ログには何もでませんでした。
あれ、このパターンはなんだっけ??
メッセージの意味もよくわかりませんでした、列1が無効なSAS名??
しばらく考えて、あ、もしかしてと思って
options validvarname=any;
としてから、そのデータセットを開いてみると
となっていました。
この「列1」というのラベルじゃなくて、ガチで変数名です。
つまり、
data Q1;
列1='い';列2='ろ';列3='は';output;
run;
のようなデータセットで、なんと変数名に日本語が使われていたのです。
そんな特殊なデータセット送ってこないでよ、、。
validvarname=anyを使うと、SASの変数名に対する命名規則が適用されなくなり
日本語だろうがなんだろうが変数名にしてコードがかけるようになります。
ただ、普通はそんなことしません。他のシステムとの兼ね合い等でどうしても
命名規則に反する変数名を使う必要がある時ぐらいでしょうか?
まあ、乱暴な方法として、libnameでheader=yesの状態でエクセルにデータをアウトプットする
際に変数名を日本語にすることで、あたかもラベル出力したように見せかけたりできますが、
あんまり綺麗なことじゃないです。
options validvarname=V7;
で通常の命名規則になります。
あと、面白いのは
options validvarname=UPCASE;
ですかね。
このオプションが効いている状態で作成されたデータセットは
たとえ以下のように
data A;
x=1;
run;
小文字で変数名を書いて、実行しても
勝手に大文字に変更されます。
これはオプションを解除しても大文字のままです。
使いどころとしては最終的なデータセットの変数名が
大文字に統一されていることが必ず必要な場面であれば、
最後のステップでこのオプションをつけて作成すればいいですね。
まあ最初から宣言しててもいいですけど。
0 件のコメント:
コメントを投稿