9.4から登場した拡張属性(Extended Attribute)はあんまり話題になんないねって話

昔、とある場所でデータセットをみていた際、変数に全部に長~いラベルがついてました
例えば、[XX_日付型_データAA由来] のようにその変数の元の参照先や、詳細な型について記載されてました。

誰がみても、その変数の詳細がわかるようにと、義務づけられてるそうです。

まあ、確かにSASって文字型と数値型しかないので、普通にプロシジャに数値型全指定でかけたら
日付もIDも集計してくれたりするし、データセットいじってる内に、この変数ってどっからきたの?みたいなこともあります。

まあ、定義書で管理すればいいんじゃないって気がしてましたし、
ラベルでそういうのを管理するのは限界があるよな~って思いました。

データセット自体にXMLのように自由に属性つけれれば管理がはかどるのにって思う方もいるのでしょう。

そんなあなたに朗報。9.4から自分で好きに属性を定義して、それをデータセットに付与することが
できるようになりました。

それが拡張属性です!

9.4で登場した新機能のひとつですが、DS2やFedSQLに輪をかけて影が薄い!!
誰も話題にしてないこと、この上なしです。

例えば以下のようなデータセットがあるとします。

data Q1;
x=1;y=19562;z=320;output;
x=2;y=19566;z=280;output;
x=3;y=19569;z=120;output;
format y yymmdds10.;
run;











これに、その変数の説明と、参照元、型の補足(日付なのか、IDとかみたいに質的なものなのかとか)を
それぞれ
detail source cate という適当な属性を作って付与してみようと思います。

以下を実行します

proc datasets nolist;                             
   modify Q1;     
      xattr add var x (detail="ユーザーID" source='登録情報' cate="ID") 
                    y (detail="XX日" source='20XX年情報' cate='日付')                    
                    z (detail="売り上げ(千円)" source='売り上げ情報' cate="量的変数")
;                    
run;                 
quit;

拡張属性はいまのとこ、proc datesetsでしか作れないみたいです。attribステートメントとかでも
作れればいいのにね。

文法は上記のとおりで、xattr add varで変数に対する拡張属性を付与できます。
ちなみにvarのところをdsにすると、データセットにも属性を定義できます。

脱線しますが、ラベルにもあまり使われていないですが、データセットラベルというのが
昔からありました。
「データセットラベルの話」
http://sas-tumesas.blogspot.jp/2014/08/blog-post_31.html


で、話を戻して、拡張属性を付与したら、そのデータセットをcontentsプロシジャで確認してみましょう。
(ods ooutputは後で使うのでおまけです)

ods output ExtendedAttributesVar=xattr_ds;
proc contents data=Q1;
run;



























このように、付与した拡張属性を参照することができました。


例えばこれを使って、拡張属性で「cate」の値が「量的変数」の変数のみを
meansにかけたいな~と思ったら、さっきods outputでデータセット化しておいたものを
使って

data _null_;
length target $1000.;
set xattr_ds end=eof;
retain target;
where ExtendedAttribute='cate' & AttributeCharValue='量的変数';
target=catx(' ',target,attributevariable);
if eof then call symputx('target',target);
run;


proc means data=Q1;
var ⌖
run;

上記のようにかけるわけですね。

拡張属性、バリバリ利用してますって方がいれば、どんなことしてるか是非教えてほしいです

0 件のコメント:

コメントを投稿