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を集計するので、「グラフに使用する統計量」に合計を指定します。それと凡例の箇所もチェックしてください。


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

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

2016年10月20日木曜日

Object Spawnerのログが英語で出力される

またレアな事象にぶつかったのでメモしておきます。Object Spawnerのログが何故か英語で出力される問題にぶつかりました。OSのロケールは日本語にしているにも関わらずです。
Object Spawnerの設定に言語やエンコーディングは無かったので、1時間ほど調べながら悩みました。

応えは、Local System Accountの言語が英語(EN)になっていたためでした。構築した環境はSAS9.4、Windows Server 2012で、AWS上に構築しています。土台が英語環境だったのであとから、日本語に切り替えたのですがこれが原因でした。

調べたのはレジストリエディタで、Local System Accountのユーザ環境を手繰って、Control Panel, Languagesのエントリの下を見て言語が英語になっていることを確かめました。また、Objspawn.exeをコマンドプロンプトから直接叩いて、他のアカウントではメッセージが日本語ででることを確かめました。

回避策として、他のローカルアカウントをAdministratorsに加えて、ローカルポリーシーでLocal System Accountが持っているのと同じ権限を付与しました。Local System Account自体の言語の設定を変えることも考えましたが、レジストリをいじるぐらいしか手が思いつかず、危険なのでやめました。