2018年8月28日火曜日

データステップにデータセット名ではなく、パスを直接書く

データステップの書き方で、データセット名ではなくファイルのパスを直接書けます。これは、同僚に教えてもらいました。マニュアルを見ると、以下のようにTIPSとして記述がありました。 Tips:Instead of using a data set name, you can specify the physical pathname to the file, using syntax that your operating system understands. The pathname must be enclosed in single or double quotation marks.

1          data "/var/tmp/mylib/class";
2               set sashelp.class;
3               keep age name;
4          run;

NOTE: There were 19 observations read from the data set SASHELP.CLASS.
NOTE: The data set /var/tmp/mylib/class has 19 observations and 2 variables.
NOTE: DATA statement used (Total process time):
      real time           0.01 seconds
      cpu time            0.01 seconds


NOTE: SAS Institute Inc., SAS Campus Drive, Cary, NC USA 27513-2414
NOTE: The SAS System used:
      real time           0.08 seconds
      cpu time            0.03 seconds

% ls -l /var/tmp/mylib
-rw-rw-r-- 1 sas sas 131072  8月 28 17:39 2018 class.sas7bdat

2018年5月9日水曜日

カタログにSASプログラムを格納するサンプル

カタログにプログラムを格納するサンプルです。探したら良い例が見つからなかったのでメモしておきます。

/* ディレクトリにあるMM_MISC.sasをカタログに格納する */
filename there '/tmp' ;
libname mylib '/tmp/sashelp' ;

%let trialcode = MM_MISC;
%let catname = modelmgr;

data _null_ ;
    filename mycat catalog "mylib.&catname" lrecl= 256 ;
    file   mycat("&trialcode..source") ;
    infile   there("&trialcode..sas") ;
    input ;
    put _infile_ ;
run;

proc catalog c=mylib.&catname;
    contents;
run;
quit;

/* 格納したプログラムを読み込む */
filename chkinit catalog "mylib.&catname..&trialcode..source";
%include chkinit;


2018年5月2日水曜日

カタログに含まれているソースコードを1ずつ取り出してファイルに保存

カタログの中に含まれているソースコードを、1つずつ取り出してディレクトリに出力するマクロです。Model ManagerのAPIの中身を見るために、書きました。

/* ソースコードをファイルに出力するマクロ */
%macro _myfile(catalog=, memname=, dir=);
 data _null_;
  infile "&catalog..&memname..source" catalog;
  file "&dir./&memname..sas";
  input;
  put _infile_;
 run;
%mend;

/* カタログに含まれているソースコードをディレクトリに出力するマクロ */
%macro extract_source(in=, dir=);
 %local out memname;

 data;
  stop;
 run;

 %let out=&SYSLAST;
 %let memname=%substr(&out, 6); 

 proc catalog catalog=∈
    contents out=&out;
 run;

 data _null_;
  set &out(keep=name type);
  where type eq 'SOURCE';
  attrib catalog length=$32;
  attrib dir length=$128;
  catalog = "&in";
  dir = "&dir";
  call execute('%_myfile(catalog='||catalog||", memname="||name||", dir="||dir||")");
 run;

 proc datasets lib=work nolist;
  delete &memname;
 quit;
%mend;

%extract_source(in=sashelp.modelmgr, dir=/var/tmp);

2018年4月17日火曜日

SAS9.4 TS1M5 - VARCHARのデータ型

同僚から聞いたネタです。
TS1M5の新機能でVARCHARが加わったそうです。資料を探したら、日本語の新機能とWhat's Newに記載ありました。

SAS9.4の新機能

What's New in SAS 9.4 National Language Support

使い方はこれから勉強です。

2018年4月5日木曜日

SAS Environment Manager 2.5 - 使いどころ

製品紹介から引用したSAS Environment Managerの説明 

SAS Environment Managerは、SAS配置の新しいモニタリングと管理システムです。リソースの自動検出、リモートシステムのモニタリング、個人用ダッシュボードと役割ベースダッシュボード、アラート、視覚化などの機能が実装されています。中間層とSAS Server層の両層のサーバーに対する、Webベースの管理、操作、事前予防型のモニタリングを提供します。SAS Environment Managerには、エンタープライズレベルの操作機能を提供するために、VMwareのHypericテクノロジの一部が組み込まれています。

私の説明

もしあなたが以下の条件に当てはまるならば、SAS Environment Managerの利用を推奨します。あまり浸透していないようですが、構築および運用で役立つ機能です。

  • SAS 9.4 Intelligence platform構成でかつ複数サーバ構成 
  • システムの安定稼働で監視が必要
  • 負荷テスト、ロングランテストで設定を調整したい

勧める理由

デフォルトで定義されているアラートでSASのエラー、Web Application Serverのヒープの枯渇など多く情報を収集してくれます。しかも複数サーバ構成でも、SAS Environment Managerのダッシュボードで把握できます。アラートの種類は多くて、経験測に従うよりかは網羅性が高いです。アラートですが、検索で”Service Architecture Alert Definitions"で検索すると一覧が出てきます。

負荷テスト、ロングランテストでWeb Application Serverの処理時間やTime Outの件数、クライアント数など豊富な指標(Hyperic HQ用語でメトリックス)が取得できます。SAS固有のメトリックス以外にも、CPU, Free Memoryなども取れます。メトリックスの値はチャートからCSVファイルに保存できますが、 Hyperic HQのコマンドを使って、テキストファイルに抽出することもできます。

負荷テストが求められる規模のシステムであれば、インスト、構成、初期設定の後にSAS Environment Managerを設定して、負荷テストで発生するアラートやメトリックスを点検することをお勧めします。

よくチェックするアラート

アラートの定義は多数ありますが、私がよくチェックしている項目を挙げます。アラートの一覧を知りたければ、検索で"SAS Environment Manager Service Architecture Alert Definitions"で検索すると資料が見つかります。

  • Webapp CPU Time in Garbage Collection > 30%
  • Excessive Time Spent in Garbage Collection
  • Webapp Heap Free Memory < 5% of Max
  • Workspace Server ERROR message in log
  • Logical Workspace Server Timed Out Clients
  • Object Spawner ERROR message in log
  • Metadata Server ERROR message in log
  • SASWork Disk Use % > 95
  • SASHome Disk Use % > 95
  • SAS License Termination

その他

SASのサービスを起動、停止もできるのですが、他の運用ルールとの兼ね合いがあるので喧伝していません。下手にユーザがサービス上げ下げすると困るから。もちろん、役割を定義してサービスのコントロールを実行できないようにすることも可能です。


2018年3月3日土曜日

EGで作ったSASプログラムを、バッチジョブ化する方法

割とよくある話ですが、調べるのに時間が掛かったのでメモしておきます。
EGで作った.SASのプログラムをJP1のようなジョブスケジューラから実行したいということは良くあります。このとき、Metaデータに登録されているライブラリをどうやって定義するのか?

元ネタは以下の記事です。
how to write a .sh file to run a sas program

$ /opt/sas/config/Lev1/SASApp/sas.sh -nodms -sysin ~/foo.sas -log ~/foo.log
$ grep '論理' ~/foo.log
NOTE: ライブラリ参照名SASDATAは論理サーバーから正常に割り当てられました。
NOTE: ライブラリ参照名STPSAMPは論理サーバーから正常に割り当てられました。
NOTE: ライブラリ参照名ACMは論理サーバーから正常に割り当てられました。
NOTE: ライブラリ参照名ARTIFACTは論理サーバーから正常に割り当てられました。
NOTE: ライブラリ参照名EVDMは論理サーバーから正常に割り当てられました。
NOTE: ライブラリ参照名KITSは論理サーバーから正常に割り当てられました。
NOTE: ライブラリ参照名EVDBは論理サーバーから正常に割り当てられました。
$
当然ながらPre-Assignされていないライブラリは明示的にSASプログラム内部でLIBNAMEステートメントを書いてください。

2018年2月6日火曜日

SAS基盤構築のサービス色々

SASの基盤構築に噛んでますが、色々やることあります。