data _null_; format start end yymmdds10.; start = '01mar1992'd; end = '01mar1999'd; /* BUG */ dif = yrdif(start,end,'ACT/ACT'); put _all_; dif = intck('YEAR', start, end); /* 今年の誕生日がまだ来ていない場合は、数え年から1を引きます */ if (month(end) < month(start)) then dif = dif - 1; else if (month(end) = month(start)) and day(end) < day(start) then dif = dif - 1; put _all_; run;
SASプログラムとログを解析するユーティリティを開発するための備忘録です。This is a memo to develop utility that analyzes the SAS log.
2013年2月16日土曜日
年齢の計算
YRDIFを年齢の計算に使っていましたが、不具合があることに気がつきました。結局、古典的なコードを引っ張り出して計算しています。
2013年2月9日土曜日
Peek at your data using VBScript, OLE DB, and the SAS local data provider
SAS Local Data Providerを使って、SASデータセットの情報を読み取るサンプルコードです。元ネタはココですが、貼り付けるときにバックスラッシュが化けたのかそのままでは動きませんでした。少し手直ししています。SAS.EXEを起動しなくてもOKというのが軽くて良いのですが、果たして何に使うかは思案中です。Delphiで作るツールに役立つかも。
path = "C:\Program Files\SASHome\x86\SASEnterpriseGuide\4.3\Sample\Data" filename = "Candy_Sales_Summary" WScript.Echo "Path specified: " & path WScript.Echo "File name : " & filename ' Check registry for SAS Local Provider Set WSHShell = CreateObject("WScript.Shell") clsID = WSHShell.RegRead("HKEY_CLASSES_ROOT\sas.LocalProvider\CLSID\") 'clsID = WSHShell.RegRead("HKCRSAS.LocalProviderCLSID") WScript.Echo "DIAGNOSTICS: SAS.LocalProvider CLSID is " & clsID inProcServer = WSHShell.RegRead("HKCR\CLSID\" & clsID & "\InprocServer32\") WScript.Echo "DIAGNOSTICS: Registered InprocServer32 DLL is " & inProcServer ' Constants for ADO calls Const adOpenDynamic = 2 Const adLockOptimistic = 3 Const adCmdTableDirect = 512 ' Instantiate the provider object Set obConnection = CreateObject("ADODB.Connection") Set obRecordset = CreateObject("ADODB.Recordset") obConnection.Provider = "SAS.LocalProvider" obConnection.Properties("Data Source") = path obConnection.Open obRecordset.Open filename, obConnection, adOpenDynamic, adLockOptimistic, adCmdTableDirect 'Report on Fields in this data set WScript.Echo "" WScript.Echo "Opened data " & filename & ", Record count: " & obRecordset.RecordCount For Each Field In obRecordset.Fields If Field.Type = 5 Then pType = "Numeric" If Field.Type = 200 Then pType = "Character" WScript.Echo Field.Name & " " & pType Next obRecordset.Close obConnection.Close
登録:
投稿
(
Atom
)