2018年11月9日金曜日

Windows PCにPython/SWATを導入して、Titanicのサンプルを実行する

仕事でSAS Viya3.4とPython/SWATの導入を行うことになりました。Viyaのインストールは人任せですが、Python/SWATは勉強がてら自分のノートPCに入れてみました。Anaconda、Python/SWATとDLPyをインストール、サンプルのTitanicを動かすところまで試します。

まずは、Anacondaを検索してインストーラをダウンロードします。


インストーラに従って、Anacondaを入れます。途中でmicrosoft VSCodeを入れるか質問されましたが、スキップします。PATHを書き換えるかどうか質問されますが、これは書き換えません。複数バージョン使うために、PATHには入れないという解説がどこかにありまました。

15-20分ほど掛かってインストールできたら、WindowsのスタートメニューからAnacondaが入っていることを確認します。


次に、Python/SWATとDLpyをインストールします。スタートメニューにある、Anacond Promptを起動し、pipコマンドでインストールします。 具体的なコマンドは画面イメージを参照してください。
DLPyも同じようにpipコマンドで、インストールします。 もしwisted 18.7.0 requires PyHamcrest>=1.9.0, which is not installed. というようなメッセージでたら、pip install -U PyHamcrest でアップグレードしてください。

次に、サンプルのコードをGibHubから引っ張ってきます。URLは画面イメージを参照してください。右側の緑のボタンでダウンロードして、Desktopに展開します。


Windowsのスタートメニューから Jupyter Notebookを選択します。

Jupyter NotebookのFileタブから、 Desktopに展開したsas-viya-programming-master\python\titanic\TitanicExample.ipynb を開きます。

 Viyaのサーバーに接続する箇所を修正します。具体的な箇所は画面イメージを参照してください。
最初のセル(import numpyの部分)を選択して、再生ボタンをポチポチおすと処理が進んでいきます。

2018年10月24日水曜日

メタデータに登録されているDefaultAuthのログインを変更する。

SAS9のメタデータを操作するときの資料の在りかをメモしておきます。

ユーザのADドメインが変更されるときに、DefaultAuthのログインを書き換える必要があります。10人ぐらいだと手でもできますが、数百人を手作業だと時間もかかかるのと、確実性に欠けます。で、SASプログラム書いてメタデータ書き換えるのに参考となる資料が、SAS® 9.4 LanguageInterfaces to Metadata,Third Edition です。

この中にあるサンプル、PROC PRINT of Logins Data Setが役立ちます。メタデータからログインの情報を検索して、データセット化してくれます。この中に書き換えるログインの名前、オブジェクトIDを特定できます。オブジェクトのIDが判れば、metadata_setattrでURI、項目、値を指定してあげれば書き換えできます。

オブジェクトの項目は様々で探すのが面倒です。そんなときには以下の記事が役立ちます。昔ながらのDMS又はSMCのツールから、メタデータオブジェクトの情報を検索できます。

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. 1          data "/var/tmp/mylib/class";  
  2. 2               set sashelp.class;  
  3. 3               keep age name;  
  4. 4          run;  
  5.   
  6. NOTE: There were 19 observations read from the data set SASHELP.CLASS.  
  7. NOTE: The data set /var/tmp/mylib/class has 19 observations and 2 variables.  
  8. NOTE: DATA statement used (Total process time):  
  9.       real time           0.01 seconds  
  10.       cpu time            0.01 seconds  
  11.   
  12.   
  13. NOTE: SAS Institute Inc., SAS Campus Drive, Cary, NC USA 27513-2414  
  14. NOTE: The SAS System used:  
  15.       real time           0.08 seconds  
  16.       cpu time            0.03 seconds  
  17.   
  18. % ls -l /var/tmp/mylib  
  19. -rw-rw-r-- 1 sas sas 131072  8月 28 17:39 2018 class.sas7bdat  

2018年5月9日水曜日

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

カタログにプログラムを格納するサンプルです。探したら良い例が見つからなかったのでメモしておきます。
  1. /* ディレクトリにあるMM_MISC.sasをカタログに格納する */  
  2. filename there '/tmp' ;  
  3. libname mylib '/tmp/sashelp' ;  
  4.   
  5. %let trialcode = MM_MISC;  
  6. %let catname = modelmgr;  
  7.   
  8. data _null_ ;  
  9.     filename mycat catalog "mylib.&catname" lrecl= 256 ;  
  10.     file   mycat("&trialcode..source") ;  
  11.     infile   there("&trialcode..sas") ;  
  12.     input ;  
  13.     put _infile_ ;  
  14. run;  
  15.   
  16. proc catalog c=mylib.&catname;  
  17.     contents;  
  18. run;  
  19. quit;  
  20.   
  21. /* 格納したプログラムを読み込む */  
  22. filename chkinit catalog "mylib.&catname..&trialcode..source";  
  23. %include chkinit;  

2018年5月2日水曜日

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

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

  1. /* ソースコードをファイルに出力するマクロ */  
  2. %macro _myfile(catalog=, memname=, dir=);  
  3.  data _null_;  
  4.   infile "&catalog..&memname..source" catalog;  
  5.   file "&dir./&memname..sas";  
  6.   input;  
  7.   put _infile_;  
  8.  run;  
  9. %mend;  
  10.   
  11. /* カタログに含まれているソースコードをディレクトリに出力するマクロ */  
  12. %macro extract_source(in=, dir=);  
  13.  %local out memname;  
  14.   
  15.  data;  
  16.   stop;  
  17.  run;  
  18.   
  19.  %let out=&SYSLAST;  
  20.  %let memname=%substr(&out, 6);   
  21.   
  22.  proc catalog catalog=∈  
  23.     contents out=&out;  
  24.  run;  
  25.   
  26.  data _null_;  
  27.   set &out(keep=name type);  
  28.   where type eq 'SOURCE';  
  29.   attrib catalog length=$32;  
  30.   attrib dir length=$128;  
  31.   catalog = "&in";  
  32.   dir = "&dir";  
  33.   call execute('%_myfile(catalog='||catalog||", memname="||name||", dir="||dir||")");  
  34.  run;  
  35.   
  36.  proc datasets lib=work nolist;  
  37.   delete &memname;  
  38.  quit;  
  39. %mend;  
  40.   
  41. %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

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

2018年2月6日火曜日

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

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


2018年1月17日水曜日

SAS Visual Analyticsの負荷テストでNeoLoad

SAS Visual Analyticsの負荷テストで、NeoLoadのFree Editionを使いました。
Classic ModeだとAMFがエラーになりますあ、VAのプラグインのJARファイルをNeoLoadのプロジェクトに登録することですエラーを回避できます。
設定箇所はEdit > Preference > Project Settings > Modules Managerです。
JARファイルは、SAS_HOME/SASVersionedJarRepository/eclipse/plubinsの下にある1200程度のファイルです。

4年ほど前にJMeterを少しだけ触りましたが、それと比べてNeoLoadは分かりやすく操作性が良いツールです。