Добавить данные из SAS в Excel с помощью SAS Office Add in - PullRequest
0 голосов
/ 12 мая 2011

У меня есть проект SAS, который нужно запускать ежемесячно. Сгенерированные данные должны быть загружены в книгу Excel. Есть ли способ добавить данные новых месяцев в конец предыдущих месяцев, не обновляя все данные?

Ответы [ 2 ]

1 голос
/ 20 мая 2011

Вы можете точно указать, куда вы вставляете данные, поэтому, возможно, если вы отслеживаете место, куда вы хотите добавить следующее обновление, вы можете использовать что-то вроде следующего, чтобы вставить его туда:

data _null_;
  set try;
  file dde "EXCEL|sheet!R10C1:R150C20" notab lrecl=2000; #sheet & cell refs;
  put var1 var2 varn;
run;

Раньше я этим не пользовался, поэтому не могу комментировать дальше.

Однако рекомендованный метод заключается в добавлении ежемесячного обновления в скользящий набор исторических данных в SAS и последующем экспорте всех данных.чтобы преуспеть.У вас гораздо больший контроль над форматированием и любым анализом, который вы, возможно, захотите сделать в будущем, в SAS, а не в Excel.

0 голосов
/ 27 ноября 2012

Конечно - с помощью VBA и МОМ! Это должно сделать трюк:

Dim obSAS As SAS.Workspace
Dim obWorkspaceManager As New SASWorkspaceManager.WorkspaceManager
Dim obConnection As New ADODB.Connection

Sub Connect_to_SAS()
   Dim obServerDef As New SASWorkspaceManager.ServerDef
   Dim xmlString As String
   Dim errorXML As String
   Dim myUserid As String
   Dim myPwrd As String
   Dim myPort As String
   Dim myServer As String

  ' Enter these params
   myPort = 8561
   myServer = "blah.companyname.com"
   myUserid = "you@saspw"
   mytargetsheet = "Sheet1" ' where the data is going
   mytargetrow = 2 ' where the data gets pasted

   ' connect to sas
   obServerDef.Port = myPort
   obServerDef.Protocol = ProtocolBridge
   obServerDef.MachineDNSName = myServer
   myPwrd = InputBox("User = " & myUserid & vbCrLf & vbCrLf & _
    "Please enter SAS password below", "Login Prompt", "Password")
   If myPwrd = "" Then End
   Set obSAS = obWorkspaceManager.Workspaces.CreateWorkspaceByServer( _
        "My Ref", VisibilityProcess, obServerDef, myUserid, myPwrd, xmlString)
   If (Len(errorXML) > 0) Then MsgBox errorXML
    'submit your sas code
   obSAS.LanguageService.Submit "data x; x=1; run;"
   ' retrieve data (cols not needed as we are doing an append)
    Dim obRecordSet As New ADODB.Recordset
    obConnection.Open "provider=sas.iomprovider.1; SAS Workspace ID=" _
        + obSAS.UniqueIdentifier
    obRecordSet.Open "work.x", obConnection, adOpenStatic, adLockReadOnly _
        , adCmdTableDirect
    Sheets(mytargetsheet).Cells(mytargetrow, 1).CopyFromRecordset obRecordSet
   ' close session
    obWorkspaceManager.Workspaces.RemoveWorkspace obSAS
    obSAS.Close
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...