The Nameless City

何故か製薬やSAS関連のブログ、の予定。

SAS Tips

SASの欠損値

www.cresco.co.jp 見かけて、ふむふむと頷いていたのですが。 SASの欠損値の要諦 missing valueと英語表記されますが、RDBのNULLとは違う挙動をします。 NULLは型としてNULL型があるが、SASの場合には文字列型・数値型などの型を持ちます。 結果として、欠損…

COMPAREプロシージャ使い方(ダブルプログラミング用)

変数の数不一致を検出(しやすいように) LISTVARオプションつける 計算誤差をスルーしたい場合 METHOD=ABSOLUTEとかにして、CRITERION=1E-12を設定する ※1E-12は取り決めであるけども大体これくらいの計算誤差は出る 差があったらERRORをログに出す ERRORオ…

UNIVARIATEプロシージャとMEANSプロシージャとSUMMARYプロシージャの使い分けについて少し。

これらはほとんど変わらない、とSAS V6のマニュアルを見ても書いていた記憶が・・・・・・SAS日本語オンラインマニュアルの、「Base SAS 9.4 プロシジャガイド」に載っているリスト(p.2079)とかが便利です。統計プロシージャのガイドでないところが何とい…

特殊欠損値の扱いについて少し。

sas-tumesas.blogspot.com を見て。特殊欠損値は、気がつく人は気がつく、知らない人は知らないし分かりづらいのであんまり使う事はないのですが。 以下サンプル。 data _NULL_ ; a = .M ; put a ; if a^=. then put '特殊欠損値は通常の欠損値とは異なりま…

独自のエラーをログに書く際に考える事。

SASが標準で作成するログのパターンに合わせるかどうか 「ERROR:...」「WARNING:」「NOTE:」みたいなのに合わせるかどうか。 あと、SYSERR等を取り扱うかどうか。 SAS DMSの中で色が違うだけでいい、というのであれば、ログにputステートメント等で「ERROR:.…

Excelから出てきたようなCSVを、途中の改行を別フレーズに置き換えるサンプル。

こんなの。 filename _IN ... ; filename _OUT ... ; data _NULL_ ; length TEXT $32767. ; infile _IN lrecl=32767 dlm='1a'x; input TEXT ; file _OUT lrecl=32767 dlm='1a'x; length NUM_DQ FLG_DQ 8. ; retain FLG_DQ ; if _N_ = 1 then FLG_DQ = 0 ; NU…

DMS動かしつつ、裏でバッチ実行するというやり方。

と言っても大げさなものではなく、 単純に、SASUSERのパス変えた違うsasv9.cfgで実行させればいいという話です。 パラレルにバッチ実行するには、rsasuserシステムオプションと、ods pathのパスの最初にWORK.TEMPLATEとかをprependしてやればよいです。ちょ…

コードリストになっている文字列から、コード値の数値に変換する方法

要約 コード変換については、SASの場合にはフォーマット/インフォーマットを使うのが楽です。 数値コード→文字列変換 数値フォーマットを使います。 文字列コード→文字列変換 文字フォーマットを使います。 文字列→数値コード変換 数値のインフォーマットを…

連続性の補正、という言葉について。

直接相談された訳ではないので言ってませんが、メモとして。 この単語が出てきた場合には、 何らかの値が本来は離散値であるにも関わらず、連続値として想定し、連続値用の分布を使って近似する場合で、 ちょっと統計的に有意な差が出ないような側に統計量計…

UTF-8で勘違いしてた事。

wつかないlatin-1領域でも、UTF-8に変換すると非ASCIIの所で2バイトになる。 完全にASCIIなら同じに出来るが、latin-1、wlatin-1なら変換が必要で、 latin-1 最悪二倍 wlatin-1 最悪三倍 だなと。 S-JIS領域での最悪は3倍になる事がある。 半角カナが1バイト…

SASのUTF-8で考える事アレコレ。

簡単ながら。 データセットの内容自体はほぼ対応出来る。 文字の固定長指定を長めにしなければいけないとか色々あるけど、とりあえずは出来る。 問題が残る所がある。 SASのラベルの長さが制限されているが、この為、うっかりすると文字が切れる。日本語で25…

トランスエンコーディング、というお話を見て。

namelesscity.hatenadiary.com SASユーザー総会でも誰ぞの発表ありましたが。 エンコーディング情報がないレガシーデータの地獄。 そんなデータあらへんやろーという人に一つだけ言うと。 SAS V6辺りではエンコーディング情報がデータセットにくっついてませ…

立派な客よりマトモな客求む。

もう、あのシステム保守自体切りたいんだけどマジで。 某製薬会社向けの受託開発やったのおそらく十年は前。 システム綺麗にしましょうとかバージョンアップさせましょうとか延々と伸ばされ提案は却下され、保守費用も月数時間とお客さん環境に接続する為のe…

多分、前のDISのは、当面直らないんではと思う。

namelesscity.hatenadiary.com あれからも、このバグって簡単かねえと思いながら見てたのですが、 そういや、 ・Oracleの場合二重引用符で列名を指定する事が出来た なと。 SASは名前リテラル('~'n)というのを持っているので二重引用符と一重引用符の使い…

意外と知られていない、データセットの指定方法。

ネタ用のソース。 手持ちのSASで試して見て下さい。 しかし、SAS On Demandの場合にはこれで動くかはやってないので正確な所は分かりませんが多分出来ないです。SAS University Editionも同様で、SAS Integration Technology上に乗っかってるのでは、XCMDが…

SASの各種ツールはSAS構文全てに対応している訳ではない、例としてのDISの変な挙動の話。

DISのマッピングで出てる警告について聞かれたのですが。 DISにはDISに食わせる為の書き方というのがあって、例えソースが一種類であっても、「テーブル.列名」という記述をする必要があったんじゃないかと記憶しているのです。 面倒臭いなと思ったら生SASを…

COMPRESS=オプションの活用。

実は、V6時代から存在するけど、その実あまり使われていないような気がするオプションですが、 パフォーマンス等にメチャクチャ影響するので、適度に使う事を推奨したいオプションです。 個人的にはCOMPRESS=YESってデフォルトでもいいと思うんですけどね。 …

SASデータセットでストレージが圧迫されて困る人へのTips。もう少し深めに。

「○○ではサイズがちょっとだったのに、SASデータセットにすると大きくなる」というのは、あるあるなので。 その予断を地上から消し去りたい。 SASデータセットでストレージが圧迫されて困る人へのTips - The Nameless City SASの固定長文字列型という所が悪…

SASデータセットでストレージが圧迫されて困る人へのTips

とりあえずの策 COMPRESSを有効にして保存してみる事をお勧めします。 特に文字データが多い場合には有効です。固定長文字列を採用している事もあって、SASデータセットは文字データを含んでいると無駄な容量食ってる事が多いです。 暇なら、固定長文字列の…

SASのResponseファイルが文字化けを起こす。

SAS Deployment Wizardを使うと、%userprofile%\AppData\Local\SAS\SASDeploymentWizard の中にいろいろSDWの実行ログができるんだが、その中には、画面からの選択を記憶しておいてくれるResponseファイルというのがあるんだが。 これを使って記録していた情…

HRESULT系のエラーがSASに絡むと大変だよなあという。

頭を悩ませて来た問題ではあるんだけど。 混ざって来てたから一緒の問題だと思い込んでたけど、違うわ・・・・・・ HRESULT 800ac472 from set operations in Excel Yes, you are getting the VBA_E_IGNORE error that Excel will return when you try to in…

SAS Hot Fix Analysis, Download and Deployment Tool(SASHFADD)に残念感を覚えつつ、FTPを使わずにHotfixを取得する。

うんまあ、一応言っておくと、SASのせいとは言わない。 言わないんだが、もう少しどうにかしてくれてもいい感じはある。 FTPのプロキシ設定を超えるのが、ここんとこ難しい。 ウチのProxyはPACファイル仕様である。そもそも、Windows謹製のFTPがProxyに対応…

SASの技術情報の場所として、Knowledge Baseはもう少し使われてほしい。

英語翻訳の仕事をしている訳ではないんで、ホント「日本語の情報だせ」とか要望されるのは勘弁。 Knowledge Baseには、おおよそ日本語モノより十倍以上のノウハウがあります。 support.sas.comというかまあ、日本語ソースがあまりにも貧弱なのですが。 オス…

SASでバグを発見したら・・・・・・

色々とプロジェクトに関わってきていての経験知です。 障害として急ぎ対応される事は稀。 障害の内容によりますが、基本的にクライアントの挙動とかの場合には、修正されてもだいぶ後です。 やった事ないですが、Caryへダイレクトアタックかけられる方が対応…

SAS社テクニカルサポートを使ってきて、の雑感。

他に代わって質問する事も多々あります。・・・・・・出来れば、「SASテクニカルサポートにお願い出来ない事をこちらに聞かないでほしい」とか思うんだけど。だいぶ病んでます。 SASテクニカルサポートは、運用面でのサポートは引き受けないのが原則。 あそ…

レコード件数を取り出す「if 0 then set <dataset name> NOBS=<variable>」は、特定条件下で想定外の結果を返すので注意。

「if 0 then set 」って昔調べた時には情報ホント無かったんだけど、今SASプログラマの人がボチボチネットに書いてますね。 で、見てた時に、そういや某所でやってた時に、ここら辺で面倒臭い話あったなと思い出して調べてみた所、やっぱりこのコードは特定…

SAS9.4のサービス起動順序。

よく忘れるので。SAS(R) 9.4 Intelligence Platform: System Administration Guide, Fourth Edition/Starting, Stopping, and Checking the Status of Servers/Operating Your Servers/Overview of Server Operation/Starting Servers in the Correct Order …

Windowsでレジストリをいじって右クリックメニューに適当にS-JISでのバッチ実行用メニューを追加する。

こんな感じ。 改造元は、SAS9.4かで出て来ている、UTF-8でのバッチ実行のを見てです。まあ、要は拡張子連動の所で、明示的にコマンドを書いて上げるのです。 一応レジストリをなぶるので自己責任でどうぞ、とはいうけど、これぐらいはいじれるようになってた…

SASの移行問題アレコレ。

メモ書き。 クロスプラットフォームなのは、「データセット」だけ。 大変残念なお話ではある。 本質的に単なるテキストファイルなのでどうしようもないSASプログラムの問題はおいておくとしても。 非互換なのが、SASカタログ形式も含まれるのが地味に痛い。 …

SAS Enterprise Guideの「予期せぬエラー」「SASの実行に失敗」する場合には、落ち着いて、以下の事をチェックしておいてほしい。

少しでも無駄な悩みが減りますように。 こういうトラブルって、人を渡り歩くと本当に大袈裟な話になってくからなあ・・・・・・。 プロファイルを間違えてないか SASサーバに紐付ける形でのEGの設定なのにプロファイルを使わないローカルの設定になっていな…