2022年3月14日月曜日

マクロ変数にURLのパラメータを設定する例

 SASでREST APIを使うときにアンパサンドのエスケープでしばし悩んだのメモしておきます。URLの後ろにクエリパラメータを書くときに必要になります。&はマクロ変数を展開するときの目印であるので、これが展開されないように工夫します。で、いろいろ試したのですが1回で代入ではなく、2回の代入と関数の組み合わせで動きました。1回の代入でとも思いますが、通常URLはベースの部分とパラメータの部分に分かれるので、変数を分けた方が可読性が良いです。

%nrstrで変数Yに割り当ててから、%strでもう一度変数Zに代入しています。


追記: クエリのパラメータは PROC HTTPのオプションの機能を使う方がスマートだと判りました。以下の記事を参照してください。
http://sasutility.blogspot.com/2022/10/proc-http.html

2021年12月10日金曜日

Windows SAS9.4のサービス起動/停止のスクリプト using PowerShell

 UNIXだとsas.serversありますがWindowsにはありません。なかなか使い勝手の良いスクリプトが無かったのですが、PowerShellで書かれているサービス起動/停止のスクリプトがありました。このスクリプト、特に設定は無しでGet-ServiceでSASのサービスを探して、起動順序に従って処理してくれます。

Start/Stop all SAS Services in Windows using PowreShell



2021年11月26日金曜日

JSONのファイルをPROC HTTPで読み込む

SASでJSONのファイルを読み込むのは面倒かと思っていましたが、JSONエンジンとAUTOMAPオプションを使うと簡単にデータセットとして中身を見ることが出来ます。とりあえず読み込んでから中味を確認して、あとは用途に合わせて表形式に加工します。この例はViyaのジョブフローのスケジューリングの情報を取ってきます。
/* ジョブスケジューリングのJSONファイルとマップのファイルを定義 */
filename folders temp;
filename jsonmap temp;

/* JSONファイルを取得 */
proc http 
		url="https://henteko.azure.com/jobFlowScheduling/flows" 
		out=flows oauth_bearer=sas_services;
	headers 'Accept'='application/vnd.sas.collection+json';
run;

/* JSONファイルの先頭をログに出力して確認するだけ */
data _null_;
	infile flows;
	length buf $4096;
	input buf 1-4096;
	put _all_;
run;

/* JSONエンジンで読み込ませて、マップは生成 */
libname flows json fileref=folders map=jsonmap automap=replace;

/* 後はライブラリ参照名から要素と中身を見る */
proc print data=flows.items;
run;
自分でマップファイルを作らなくても、JSONエンジン任せで構造を読み解いて参照できるのはすごく楽です。下はJSONファイルを読み込んだ例で、もちろん中身の定義で見え方は異なります。

2021年11月14日日曜日

HHKB キーマップを vi に近づけて設定

去年ぐらいから英語版のキーボードを使っている。
  • FILCO Majestouchを10年超使う
  • Mistel BAROCCO MD770 で英語版で左右分離を8か月ぐらい
  • HHKB Professional 日本語 思った以上にキーが多くて使いこなせず 1週間で諦め
  • HHKB Professional Hybridが現在
vi歴は20年以上なので、キーマップを変更してHJKLにカーソルキーを映した。通常は左側にあるWindowsキーを右側にCommandを左側に移している。スラッシュとバックスラッシュの位置はまだ調整の余地あり。本当はX+Commandで1文字削除したかったが、HHKBの仕様で割り当てできない。代わりにD+Commandにしたがこれが思ったよりも使いやすい。左手で2つのキーを同時に押しやすいから。


 

2021年10月28日木曜日

SAS9.4 どこでシステムオプションが設定をされているか調べる

 私が良く使うけど、意外と認識されていないのが PROC OPTIONSのオプションVALUEです。このVALUEオプションを付けると、SASシステムオプションの設定がどこで行われたか判ります。引数、特定のコンフィグファイルが一目瞭然です。

proc option value=encoding value;

run;



2021年9月3日金曜日

SAS9.4 インストール十戒

 SAS9.4のインストール・構成は、手順書が合っても失敗することが多く、改善が必要と感じる。マニュアルには説明あるが、勘所として役立つオプションは埋もれている。ということで、私が独断で選んだベストプラクティスを挙げてみる。

  • インストール、構成とHOTFIX適用には必ず応答ファイルを使うこと
  • コンソールモードを使い実行のログ、応答ファイルをエビデンスとして保存
    • -console と -partialprompt の利用を推奨
  • Depotはお客様のDepotとライセンスを使い、サイト番号を合わせる
  • 必要なパッケージやカーネルパラメータの確認はスクリプト化する
  • 細かすぎる手順はオペミスを誘発するのでスクリプト化を検討
  • HOTFIXをどのタイミング、どのツールで取得するか決める
  • Planファイル作成ツールでどのようにプランを作ったか記録を残す
  • パラメータの根拠となる資料のリンクを事前準備チェックシートに残す
  • Planファイル作成ツールで作ったファイルに誤りがある場合がある
  • 包括的なシステムの検証を行うならばSAS Environment Managerを使う

それぞれに理由はあるが、ここでは細かく書かない。

2021年6月17日木曜日

ERROR "このスポーナで管理されているプロセスと一致しません"の調べ方

Gridの構成で、良くObject Spawnerのエラーに遭遇します。この原因を突き止めるのはなかなか厄介です。エラーのメッセージと原因がかけ離れていて、なんだかさっぱりわからないからです。 

 ”ERROR [00051223] :sas - 指定された UUID DA1D1904-9BC1-364A-9088-ECC2E1 3877B3 は、このスポーナで管理されているプロセスと一致しません。” 

 で、色々試して、以下のようにWorkspace Serverを起動するとエラーの原因が突き止めやすいです。proc setinit; run; を実行するSASのプログラムをテンポラリに作って、端末から実行します。 ”${Lev1}/SASApp/WorkspaceServer/WorkspaceServer.sh -sysin /tmp/foo.sas -nodms -batch” lsfのジョブ履歴から原因探しても、結局はWorkspace Serverにたどり着くことが多いです。

今日のエラーの原因は、PerfLogsのディレクトリのパーミッション設定が原因でした。良くあるのがオプションの指定の間違い、WORKの割当失敗などです。