この例では、
ExcelのVBAでSAS Workspaceオブジェクトを生成し、
SASのmeansプロシジャで、実行結果をデータセットに出力するように指定してプロシジャを実行、
実行結果をSASデータセットからADOを使ってレコードセットに読み込み、
レコードセットの内容をExcelシートにコピー
します。
ローカルサーバでSASのIOMを使う場合には、SAS® Integration Technologiesのライセンスは必要ありませんが、DCOMCNFGで規定の偽装レベルを設定設定する必要があります。(WorkspaceオブジェクトをSAS.Workspaceから直接作成する場合には設定の必要がありませんが、この例ではADOのプロバイダーIDを取得するためにWorkspaceManagerからWorkspaceオブジェクトを作成するのでDCOMCNFGの設定が必要になります。)
DCOMCNFGによる規定の偽装レベルの設定
DCOMCNFG.exeを起動して規定のプロパティの規定の偽装レベルを偽装するに設定してください。

ExcelのVBAの設定
[ツール]->[参照設定]メニューで参照設定ダイアログボックスを開いて、Microsoft ActiveX Data ObjectsとMicrosoft ActiveX Data Objects Recordset, SAS: Integrated Object Model, SASWorkspaceManager Type Libraryを参照可能なライブラリに選択します。
VBAの例
Option Explicit
Sub SASsample( )
Dim objWM As New SASWorkspaceManager.WorkspaceManager
Dim objWorkspace As SAS.Workspace
Dim xmlinfo As String
Dim dbCN As ADODB.Connection
Dim dbRS As ADODB.Recordset
Dim dbCOM As ADODB.Command
Dim nFields As Long
Dim rid As Long
Dim cid As Long
Set objWorkspace = objWM.Workspaces.CreateWorkspaceByServer("", _
VisibilityProcess, Nothing, "", "", xmlinfo)
' Submit SAS Procedures
objWorkspace.LanguageService.Submit _
"Proc means data=sashelp.prdsale; class country; var actual; output out=prd_mean; Run;"
'Create a Connection Object
Set dbCN = New ADODB.Connection
dbCN.Open "Provider=SAS.IOMProvider.1;SAS Workspace ID=" & objWorkspace.UniqueIdentifier
'Create a Command Object
Set dbCOM = New ADODB.Command
dbCOM.ActiveConnection = dbCN
dbCOM.CommandText = "select * from prd_mean"
'Get Records from a SAS Dataset
Set dbRS = dbCOM.Execute
'Get Field Count
nFields = dbRS.Fields.Count
'Set Field Names
For cid = 1 To nFields
Sheet1.Cells(1, cid).Value = dbRS.Fields(cid - 1).Name
Next
rid = 2
Do Until dbRS.EOF
For cid = 1 To nFields
Sheet1.Cells(rid, cid).Value = dbRS.Fields(cid - 1).Value
Next
rid = rid + 1
dbRS.MoveNext
Loop
dbRS.Close
Set dbRS = Nothing
dbCN.Close
Set dbCN = Nothing
Set dbCOM = Nothing
objWorkspace.Close
Set objWorkspace = Nothing
End Sub
|
実行結果