从VBA运行SAS,具有完全访问权限

Pan*_*ane 6 workspace session vba login sas

我希望有人能帮帮忙.我正在尝试构建一个子程序来从VBA启动SAS.我一直在使用SAS Workspace Manager.因为我在离我的舒适区很远的地方漫步,所以我大部分都遵循了这两个 来源.这是我到目前为止在VBA中提出的:

    Public Sub SubmitSasProg(usrid As String, passid As String, path As String, sasprog As String, varinput As String, Optional logreturn)
    Dim obWsMgr As New SASWorkspaceManager.WorkspaceManager

Dim obSAS As SAS.Workspace
Dim xmlInfo As String

Set obSAS = obWsMgr.Workspaces.CreateWorkspaceByServer("Local", VisibilityProcess, Nothing, usrid, passid, xmlInfo)

Dim obStoredProcessService As SAS.StoredProcessService
Set obStoredProcessService = obSAS.LanguageService.StoredProcessService

obStoredProcessService.Repository = "file:" & path
obStoredProcessService.Execute sasprog, varinput

If IsMissing(logreturn) Then logreturn = 100000
MsgBox obSAS.LanguageService.FlushLog(logreturn)

End Sub
Run Code Online (Sandbox Code Playgroud)

我有一个小SAS程序,我们称之为"Test.sas":

 %let loopTimes=3;
*ProcessBody;
data a;
do x= 1 to &loopTimes;
y=x*x*x;
output;
end;
run;
Run Code Online (Sandbox Code Playgroud)

现在,这一行将很好地工作:

Call SubmitSasProg("myuserid", "mypassword", "somepath", "Test", "loopTimes=10")
Run Code Online (Sandbox Code Playgroud)

但每当我尝试执行修改文件/ libnames等的SAS处理时,我将得到"此SAS会话的无效操作"或"用户无权访问". 请注意,我在本地使用SAS,而不是在服务器上. 所以我猜我没有正确登录我的SAS工作并且缺乏许可.我认为CreateWorkspaceByServer中的userId和password参数应该让我登录.

所以我的问题是如何使用我的本地计算机上的凭据成功启动SAS会话,并通过打开窗口环境获得我所拥有的所有正常访问权限.

只是为了澄清一下,这个SAS流程在窗口环境中可以正常工作:

   Data _NULL_;
      *x del C:\WINDOWS;
      x mkdir C:\Users\Myname\Desktop\NewFolder;
   run;
Run Code Online (Sandbox Code Playgroud)

但是,如果从VBA启动,则会因"此SAS会话的无效操作"代码而失败.如果我尝试编写SAS数据集,会发生类似的事情.

我一直在寻找一些时间,但大多数线程是关于SAS服务器会话.任何帮助,将不胜感激.

Pan*_*ane 2

好吧,看起来我的大部分问题都源于我不是系统管理员这一事实。\n鉴于我对使用我的帐户的目录具有写入权限,我已成功使用上述技术写入数据集(duuh)。唉,x 命令很顽固,无法工作,以免我获得管理员帐户。因此,\xc2\xabs\xc2\xbb 这个问题有两种选择:\n 1. 获得管理员权限。\n 或\n 2. 忘记工作区管理器。使用 OleObject。

\n\n

虽然不太优雅,而且执行时可能更耗时(未经测试),但 OleObject 将让我充分利用 SAS。这是 VBA 代码:

\n\n
Dim OleSAS As Object\nSet OleSAS = CreateObject("SAS.Application")\nOleSAS.Visible = True\nOleSAS.Top = 1\nOleSAS.Title = "Automation Server"\nOleSAS.Wait = True\nOleSAS.Submit(yourSAScode)\nOleSAS.Quit\nSet OleSAS = Nothing\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果你想运行一个特定的进程并更改一些宏变量,如 *ProcessBody; 只需执行OleSAS.Submit(“%let”&variable_name&“=”&“yourValue”)和OleSAS.Submit(“%include”&your_program)。

\n\n

不管怎样,我对丢失 Worspace Manager 的日志报告返回感到非常难过,它对于快速调试来说真的很棒。\n希望这有用。

\n