options mprint source; proc format; value $DATE8_F "19900401" - "19910331" = "19900401 - 19910331" "19910401" - "19920331" = "19910401 - 19920331" "19920401" - "19930331" = "19920401 - 19930331" "19930401" - "19940331" = "19930401 - 19940331" "19940401" - "19950331" = "19940401 - 19950331" "19950401" - "19960331" = "19950401 - 19960331" "19960401" - "19970331" = "19960401 - 19970331" "19970401" - "19980331" = "19970401 - 19980331" "19980401" - "19990331" = "19980401 - 19990331" "19990401" - "20000331" = "19990401 - 20000331" "20000401" - "20010331" = "20000401 - 20010331" "20010401" - "20020331" = "20010401 - 20020331" "20020401" - "20030331" = "20020401 - 20030331" "20030401" - "20040331" = "20030401 - 20040331" "20040401" - "20050331" = "20040401 - 20050331" "20050401" - "20060331" = "20050401 - 20060331" "20060401" - "20070331" = "20060401 - 20070331" "20070401" - "20080331" = "20070401 - 20080331" "20080401" - "20090331" = "20080401 - 20090331" "20090401" - "20100331" = "20090401 - 20100331" "20100401" - "20110331" = "20100401 - 20110331" "20110401" - "20120331" = "20110401 - 20120331" "20120401" - "20130331" = "20120401 - 20130331" "20130401" - "20140331" = "20130401 - 20140331" "20140401" - "20150331" = "20140401 - 20150331" "20150401" - "20160331" = "20150401 - 20160331" "20160401" - "20170331" = "20160401 - 20170331" "20170401" - "20180331" = "20170401 - 20180331" "20180401" - "20190331" = "20180401 - 20190331" "20190401" - "20200331" = "20190401 - 20200331" "20200401" - "20210331" = "20200401 - 20210331" "20210401" - "20220331" = "20210401 - 20220331" "20220401" - "20230331" = "20220401 - 20230331" "20230401" - "20240331" = "20230401 - 20240331" "20240401" - "20250331" = "20240401 - 20250331" "20250401" - "20260331" = "20250401 - 20260331" "20260401" - "20270331" = "20260401 - 20270331" "20270401" - "20280331" = "20270401 - 20280331" "20280401" - "20290331" = "20280401 - 20290331" "20290401" - "20300331" = "20290401 - 20300331" ; run;
SASプログラムとログを解析するユーティリティを開発するための備忘録です。This is a memo to develop utility that analyzes the SAS log.
2012年5月29日火曜日
年代の書式定義(2)
昨日書いたコードは難しく考えすぎました。素直に数十年先まで定義するのがシンプルです。
2012年5月28日月曜日
年代の書式定義
仕事用のメモです。4月始まりで年代を分けるための書式定義です。
options mprint source; %macro date_fmt(from=, to=, fmt=, fmtnam=); %local i tcount; data _null_; format from to end yymmddn8.; from = &from; end = &to; tcount = 0; do while (from < end); to = intnx('MONTH', from, +11, 'END'); tcount = tcount + 1; /* マクロ変数を定義 */ value = put(from, &fmt); macvar = compress("FROM" || put(tcount, BEST.)); call symput(macvar, compress(value)); value = put(to, &fmt); macvar = compress("TO" || put(tcount, BEST.)); call symput(macvar, compress(value)); call symput("TCOUNT", compress(put(tcount, BEST.))); /* 次の年を設定 */ from = intnx('MONTH', from, +12); end; run; /* 書式を設定 */ proc format; value &fmtnam %do i=1 %to &tcount; "&&from&i" - "&&to&i" = "&&from&i - &&to&i" %end; ; run; %mend; %date_fmt(from='1-Apr-1990'd, to=today(), fmt=YYMMN6., fmtnam=$DATE6_F); %date_fmt(from='1-Apr-1990'd, to=today(), fmt=YYMMDDN8., fmtnam=$DATE8_F); data _null_; x = put(today(), yymmddn.); y = put(x, $DATE8_F.); z = put(x, $DATE6_F.); put _all_; run;
2012年5月24日木曜日
SRX, 仕事で使ってみた。良かった!
Microsoft風に現せば、自らドッグフードを喰らうとでも言うのでしょうか。SRXを仕事で使ってみたが、なかなか良かった。いくつもあるSASコードから、同じような問題箇所を洗い出し、報告用の資料を作りました。
Windows環境だと、拡張子.SASのコードの中身を検索できないことがあります。社内ではUNIX上でgrep(1)を使うのですが、エビデンスのファイルを作るのが面倒でした。今回は、SRXを使ってSASプログラム一覧を作成し、抽出パターンとマッチングした結果をExcelファイルに保存しました。30分程度で、まとまったExcelファイルになって、素早さが好評でした。
改善したいと思ったのは、Excelファイルにエクスポートしたときに、ヘッダ、フッタの設定です。これも機能化すれば、10分程度でエビデンスを抽出して精査の時間をゆったり取れます。あ、Windows7未対応でした。
Windows環境だと、拡張子.SASのコードの中身を検索できないことがあります。社内ではUNIX上でgrep(1)を使うのですが、エビデンスのファイルを作るのが面倒でした。今回は、SRXを使ってSASプログラム一覧を作成し、抽出パターンとマッチングした結果をExcelファイルに保存しました。30分程度で、まとまったExcelファイルになって、素早さが好評でした。
改善したいと思ったのは、Excelファイルにエクスポートしたときに、ヘッダ、フッタの設定です。これも機能化すれば、10分程度でエビデンスを抽出して精査の時間をゆったり取れます。あ、Windows7未対応でした。
2012年5月15日火曜日
SASログの字句解析を作り直す。
SAS Log Utilityで120MB程度のSASログを解析したら、えらく時間が掛かった。Elapsed, CRUDの字句解析を個別に行っていましたが、処理効率が悪いので1つにまとめることを検討します。それと、画面の更新も足を引っ張っているので、BeginUpdate、EndUpdateで表示周りも調整します。
SASとVBScriptの連携
仕事柄VBScriptとSAS.EXEを連携することが多くあります。 サンプルコードを貼って、LanguageService Objectの資料をリンクしておきます。
'--- ' SASワークスペース・オブジェクトの生成 '--- Set oWrkSp = WScript.CreateObject("SAS.Workspace") '--- ' ランゲージ・サービスの取得 '--- Set oLngSp = oWrkSp.LanguageService '--- ' プログラムの実行 '--- oLngSp.Submit "data class; set sashelp.class; run; proc print; run;" '--- ' ログの表示 '--- MsgBox oLngSp.FlushLog(100000) '--- ' アウトプットの表示 '--- MsgBox oLngSp.FlushList(100000) '--- ' ワークスペースを閉じる '--- oWrkSp.Close Set oWrkSp = Nothing WScript.Quit(0)
登録:
投稿
(
Atom
)