2022年4月19日火曜日

PROC COMPAREでライブラリ参照名を定義しなくてもOK

バージョンアップ案件において、データセットの比較をするときにライブラリ参照名を定義しなくても比較はできます。 あと、比較するときはスクリプトでPROC COMPAREを生成してそれをSASから実行するのが良いです。後から特定の変数を外す、ソート順を変える、数値の比較の精度を変更するといった個別の修正がやりやすいから。 
title "!SASROOT/sashelp/class.sas7bdat";

proc compare
  base="!SASROOT/sashelp/class.sas7bdat"(drop=age) 
  compare="!SASROOT/sashelp/class.sas7bdat";
run;

title;

2022年4月8日金曜日

REST APIでViya4でジョブのステータス一覧を取得する

sas-viya CLIでジョブのステータス一覧を取るのは面倒です。なのでREST APIを使って一覧を作ります。サンプルのコードでは日付のフィルタ、ジョブの終了条件のフィルタ、日時で降順ソートして最大1000件のデータを取得しています。
前提としては sas-viya のCLIでprofile init, auth loginを実行済みであることです。
 
$ export ACCESS_TOKEN=$(cat ~/.sas/credentials.json | jq -r '.Default."access-token"')
$ export URL=https://viya4.example.com/jobExecution/jobs
$ curl -k "${URL}?limit=1000&filter=and(ge(creationTimeStamp,2022-04-07),ne(state,"completed"))&orderby=endTimeStamp" -H "Authorization: Bearer $ACCESS_TOKEN"   | jq -r '.items[] | [.state, .id, .jobRequest.name, .endTimeStamp, .creationTimeStamp, .modifiedTimeStamp, .elapsedTime, .createdBy, .modifiedBy, .error.message, .error.errorCode ]'
下が実行したときの画面イメージです。sas-viyaのCLIは困ったときに助かることも多いのですが、まとめてデータを取得するには不利です。curlとjqが使えればも応用の幅が広がります。