The Nameless City

何故か製薬やSAS関連のブログ、の予定。

SASの各種ツールはSAS構文全てに対応している訳ではない、例としてのDISの変な挙動の話。

DISのマッピングで出てる警告について聞かれたのですが。


DISにはDISに食わせる為の書き方というのがあって、例えソースが一種類であっても、「テーブル.列名」という記述をする必要があったんじゃないかと記憶しているのです。
面倒臭いなと思ったら生SASを書いてしまう人なので、実はあんまりDISのTransform(SASの日本語マニュアルで「変換」って書かれますけど、これ用語として良くないですよねー)を使わないのですが、DISのTransformでどこまで警告消せるかっての試してた事がありまして、その経験値になります。
DISのTransformって、結構マニアックな所までGUIで出来てしまうんですが(サブクエリも書けます)、画面のオブジェクトをクリックした中に入れ子を作っていくのは結構問題あるなーと思って、出来るだけJOINでなんとかする書き方を考えたり、色々悩む事はあります。


話戻しまして、SASのエンジンが理解出来る構文が、その実ラッパーであるDISが理解出来るかというとこれが案外理解できず困るという事は多々あります。
また、データの持ち方として、「列とはテーブルを親に保つもの」というオブジェクトが想定されているのもあるでしょう。多分。
余談ながら、式ビルダもホントイケてないから問題なんですよねえ。
Transformも複雑なものだと案外「こういう使い方するもの」ってのは、想定と違ったりするので。
自分でやる際には、殆ど生SASSQL結合使いかですねえ。


うんまあ、SQLでビュー作ったの繋いでいくよりも、生SASでビュー繋いでいく方が正直早い気がするんですよね。


ダラダラと前フリしましたが、以下、まあこういう事があるよという例です。
ちなみに、これが発生するのは、SAS DIS4.901で確認しております。

f:id:houyhnhm:20170516170009p:plain
はい、この原因は、多分文字リテラルと変数名が被っちゃっててなんだろうと思います。
因みに、データは、SASHELP.CLASSからの流用です。
f:id:houyhnhm:20170516170026p:plain
実行すると警告は出ますが、
f:id:houyhnhm:20170516170036p:plain
データについては特に問題はないです。マッピングの紐付けのメタデータがイマイチイケてないだけです。
f:id:houyhnhm:20170516170102p:plain
人力で「テーブル名.」を補完してやります。
f:id:houyhnhm:20170516170116p:plain
補完した文字は消えますが、警告マークが取れます。
f:id:houyhnhm:20170516170131p:plain
実行しても警告は出ないようになりました。


単純にDISのマッピング判定のロジックがイケてないって事だと思いますが。
直らん上に結局仕様(警告マーク無視して)とか言われかねないので、まあ下策ですがこんな形でこのジョブ上のTransformの中身を作ってやる、と。
これ出来ないと、開発系から本番系へのお引っ越しなんかの時に、テーブルの紐付けどうやって確認したらいいんだという話になりかねないので(警告マークが信用出来なくなるから簡単でなくなる)こういう対応もありかなという所です。
所詮はプログラムのエディタだと割り切った方が良いです。


一応似たようなケースでのエラーでProbrem Noteは出ていて、その中では「Warning抑止するオプションを設定」でした。
52167 - A warning occurs on the Mapping tab when you join a table with itself via aliases in SAS® Data Integration Studio
うんまあ酷いな。
今のDISでも出てますが、警告ない状況でセーブして再度開くと警告になるという、大変タチの悪い状況です。ただ、同一テーブルをソースにしてのJOINとかはまずやらんと思いますが。
報告されてるエラーの回避策として、「どちらか一個にTransformかますと大丈夫」だったりします。要は同名テーブルだがエイリアス設定があるみたいなのが上手くいってない所なので、ビューとして別物に仕立てると大丈夫だったり。
同様にして、「変数名を変えておく」のが一番マシな回避策かも知れない。

余談

SASのバージョンによって挙動が変わったりする所があるかと思います。ご注意下さい。
特にこの辺りSASの正式ドキュメントはないので申し訳ないですが表立って回答として出せない為、無責任な状況でご提示しておくものです。
なんとなく察して下さいお願いします。
お引っ越しに関しても大丈夫かどうか確認してませんのでよろしくお願いします。