2017年1月10日火曜日

PROC HTTPでSAS Environment Managerに接続して情報を取得

前回はYahooのサイトから動くサンプルでしたが、今回は特定の環境で動くPROC HTTPのサンプルです。これはSAS Environment Managerに接続して、ユーザ一覧のXMLファイルを出力するサンプルコードです。実行した後に、C:\temp\response.xmlをブラウザで開いて取得されている中味を見てください。

filename response 'c:\temp\response.xml';

proc http 
 url='http://hogehoge.com:7080/hqu/hqapi1/user/list.hqu'
 method="get" 
 out=response;
 headers "Authorization"="Basic c2FzZXZzQHNhc3B3OntzYXMwMDJ9OTdFQ0U0NEIxMDVGNEM5NzNDN0U5MDc1"
    "User-Agent"="Apache-HttpClient/4.1.1 (java 1.5)"
    "Connection"=" Keep-Alive"
    "Host"="hogehoge.com:7080"
 ;
run;


response.xmlをIEで開くとこんな具合に見えます。

AuthorizationのBasic認証のコードは、Environment Managerのログに出力されているものをコピペしました。 同じようにUser-Agent, Connection, Hostの値もログから拾っています。 urlにある、"user/list.hqu" の部分は、vFabric Hyperic Web Services APIらしい。 試しに"user/delete.hqu?name=foo"とやったらユーザを削除できた。 今後、Environment Managerの機能が拡充される気配あるので、ちょっと下準備で触ってみました。 リソースの検索で、APM ETLのパラメータを取得できるようですが、どうやって仕事に使うかはのんびり考えます。

2017年1月5日木曜日

PROC HTTPの動くサンプル

Webページを読み込むサンプルです。PROC HTTPを使って、Yahoo Japanのページを読み込み、ログに出力しています。これはSAS Environment Managerから、データを引っ張るための予習みたいなものです。
filename myfile '/tmp/foo.txt';

proc http
 method="get"
 url="http://www.yahoo.co.jp/"
 out=myfile;
run;

data _null_;
 infile myfile;
 attrib buf length=$4096;
 input buf $4096.;
 put buf=;
run;


2016年12月1日木曜日

cleanwork -hostmatch は使いにくい

使っていないWORKを削除するcleanworkですが-hostmatchオプションで、少し嵌りました。共有ファイルサーバ上にWORKを配置し、複数サーバから使うことはままあります。I/O性能高いディスクを使ってリソースの一元管理をしたい、Gridの環境ときには良くある話です。

で、cleanworkのオプションに-hostmatch オプションがあってホスト名を指定して、他のサーバが作ったWORKも削除できるのですが、これは使っているWORKも削除する恐れがあります。straceで動きを追うと、PIDの存在チェックをしています。他サーバなので意味のないチェックです。で、あっさりとWORKを削除してしまいます。

ホスト名の指定も仕様が良く分かりません。FQDNで書くと削除されたり、短いホスト名だと削除されなかったり理解できない動きをしています。使用を細かく追うのは時間が惜しいので、-hostmatchは使わず、削除は各ノードから行うのが固い手順だと結論付けます。

2016年11月28日月曜日

Excel Page Setupの修正案

機能追加を検討しています。

  • セルの値が値か数式かによってフォントの色を変更する
  • 中味がない空のシートを削除する
  • 行の高さを調整する
  • シート全体のフォントを設定する
これは最近読んだ本の中に書かれていたことです。実装して良いのか?

setup.sh -consoleでエラー

エラーのメモです。久しぶりにUNIX上で、SAS9.3のインストールを行っています。
デポの作成を、GUI無しでコンソールモードでやろうとしたら、正しく動かなかった。インストールのログをチェックすると、Disk2のメディア交換のところで、エラー終了している。

setup.sh -console

どうにもこうにも正しく動かないかった。結局、Windows7 のPC上でデポを作成、UNIX側に転送してDepotCheckerで検証してエラーを回避しました。いつもの手順が手堅い。下は参考記事です。

http://support.sas.com/kb/38/258.html

2016年11月16日水曜日

ホスト名の最後にドットをつけてはいけません。

SASのネタというよりかは、ホスト名の命名のメモです。
エラーの問い合わせあって、よく見るとホスト名の後ろにドットが付いています。
開発者はPINGが通るから大丈夫ということでしたが、これがエラーの原因でした。
RFC952のルールから外れるので、この命名だと認識されないケースあります。
参考記事はコチラです。

最初にログを見たときに指摘したものの、「大丈夫!」という意見で遠回りしてしまった。

追記します。
何故か、ホスト名の最後のドットがダメってどこに書いてあるのかと質問受けました。RRC952の原文を見ると、ホスト名の定義は以下のようになっています。

 <hname> ::= <name>*["."<name>]
 <name>>  ::= <let>[*[<let-or-digit-or-hyphen>]<let-or-digit>]

これみると、アンダースコアはNGなのね。

2016年11月13日日曜日

Enterprise GuideのMap Chartの例

SAS Enterprise Guideでマップチャートを使った例をメモしておきます。資料を探すと海外のネタがいくつか転がっていますが、今回は埼玉県のマップを描きます。さて、ここで迷ったのが日本の地図のデータをどこから取ってくるかです。東京都のデータなら、NLSのライブラリMAPSの下にあります。東京以外のデータも描きたいということで、別なところから地図のデータを探して取ってきます。地図データの検索キーワードは"地図 シェープファイル”で手繰ります。以下、マップを描く手順です。
  1. 全国市区町村界データをesriジャパンから取ってくる
  2. PROC MAPIMPORTでシェイプを読み込んでデータセットにする
  3. データセットから埼玉県だけを抽出
  4. エリア毎の濃淡をつけるために乱数で変数を作る
  5. マップチャートで描く
出力はこんなイメージです。



最初にesriジャパンのWebサイトを検索して、全国市区町村界データをダウンロードします。ダウンロードしたら、ZIPファイルを展開してc:\tempの下に置きます。

次にコードタスクで、ダウンロードしたシェイプのデータを読み取ります。埼玉県だけの情報に絞って、乱数で適当な変数を作ります。この変数はマップチャートのタスクで集計します。

データセット選択して、タスク>グラフ>マップチャートを選択します。2D塗り分け地図を選びます。因みに、シェープデータだけで「空白の地図を作成」することができます。シェープデータの中味を確認するときに使ってください。


データの役割を下の図のように設定します。ID変数役割で間違った変数を指定すると、思わぬ方向に線が引かれることがあります。そのときには、ID変数を疑ってください。


変数RANDOMを集計するので、「グラフに使用する統計量」に合計を指定します。それと凡例の箇所もチェックしてください。


プロセスフローは以下のようになるはずです。

シェイプファイルですが、様々なフォーマットで色んなところから提供されています。メッシュ上に区切った形状のものや、海岸線、避難地域など国交省のネタがあることを知りました。シェイプファイルについて、私が参照したリンクはコチラです。