手段のために目的を探すその姿勢、僕は大好きです、とても共感します。
というわけで、僕の中で定跡となっているindsnameを使った手順を紹介します
あ、ちなみに以前のindsname=の記事は
http://sas-tumesas.blogspot.jp/2013/10/indsname.html
です。
さて、今、WORKの中にたくさんのデータセットがあったとします。
data Q1;
ID='0001';output;
ID='0002';output;
ID='0003';output;
ID='0001';output;
run;
data Q2;
ID='0006';output;
ID='0002';output;
ID='0004';output;
ID='0003';output;
run;
data Q3;
ID='0005';output;
ID='0002';output;
ID='0004';output;
ID='0003';output;
run;
data Q4;
ID='0005';output;
ID='0001';output;
ID='0004';output;
ID='0003';output;
run;
data Q5;
ID='0001';output;
ID='0001';output;
ID='0001';output;
ID='0003';output;
run;
さて、これらのデータセットの中で変数「ID」の値が0001のデータを含むデータセットの名前と
0001のデータのオブザベーション数を抽出したデータセットを作成しなさいと言われたら、
どういった処理を書くでしょうか?
要するに求めたい結果は
やり方はたくさんあると思いますが、僕はこういったケースの場合
data ALLDS;
set Q: indsname=NAME;
DSNAME=scan(NAME,2,'.');
run;
proc freq data=ALLDS noprint;
tables DSNAME*ID/out=A(drop=percent ID);
where ID='0001';
run;
こう書きます。
2ステップですが、わかりやすいです。
freqに書ける前のALLDSの中身は
こんな感じです。
これって結構応用が利いて、
複数のデータセットを対象として、何か条件をかけて
その結果とデータセットの名前を、結果としたデータセットを作りたい時にわかりやすいです。
GLOBALのユーザー会でも、まだほとんど見かけないので、開拓の余地があるオプション
だと思います。テーマにするなら狙い目じゃないでしょうか。
SAS Utilityのブログを書いている小川と申します。
返信削除私の備忘録的なブログで良ければ、リンクを張っていただいても構いません。
マイナーネタばかりなので恐縮です。
コメント有難うございます!!
削除マイナーなんてとんでもないです。ログ解析等をはじめとして、SAS使い万人にとって興味深いテーマを深く探求されていて、素晴らしいと思います。今後ともよろしくお願いいたします。