何故 Snippet を使うのか?
よく使う割に書き方を忘れてしまうことがあります。そんなときにSAS Studioのスニペットが役立つということを遅ればせながら実感しました。スニペットは昔からある機能ですが、何故か敬遠というか存在を無視して使っていませんでした。しかし、頻発する「あれはどうやって書くのか?」という度に検索したり、自分のBlogを読み返したりするのは時間が惜しくなってきました。で、典型例を探して自分のスニペットに登録し始めました。
いまボランティアワークでPrometheusからデータを取得する仕組みを作っています。SAS Viya Monitoring for Kubernetes からメトリクスを取得してシステム管理に役立つ何かを得ようとしています。そんな中で開発をちょっと効率化したいと思ったわけです。
私が登録しているSnippet
参考までに私が登録しているマクロを示します。
- マクロ変数の値から引用符を取り除く
- マクロのパラメータで値が無い項目をチェックしてエラーメッセージ出力
- テンポラリのファイル参照名を定義
- ファイル参照名が定義されているか判定してクリア
- その他、PROC HTTPの例とか追加する予定
感じるメリット
書いてみると分かるのですが、諳んじて書くのと注意してコメントまで入れてロジックの穴を点検するのでは気づきがあります。例えばエラー処理で %goto でマクロの終端にジャンプするというのは統一していると方がより良いです。
また分かりやすいコメントも含めておくとより良いです。最近はCopilotに相談しながら英語圏の人でも分かりやすいコメントを入れるようにしています。急いで書くと不自然なコメントになってしまいます。
コードの例
/* Remove quotation marks from parameter values */
%let macvar=%sysfunc(dequote(%superq(macvar)));
/* Check missing parameter */
%local /readonly list=from to step query out macvar debug;
%local i n item;
%let n = %sysfunc(countw(&list));
%do i = 1 %to &n;
%let item = %scan(&list, &i);
%if %length(&&&item)=0 %then %do;
%put ERROR: Missing parameter &item in %sysfunc(lowcase(&sysmacroname));
%goto exit;
%end;
%end;
/* Assign a temprary file reference name */
%let macvar=_RF%sysfunc(putn(%sysfunc(monotonic()), z5.));
/* Clear the file reference name */
%if %sysfunc(fileref(&macvar))<=0 %then %do;
filename &macvar clear;
%end;
0 件のコメント :
コメントを投稿