我希望有人能帮帮忙。我正在尝试构建一个子程序来从 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
我自己有一个小 SAS 程序,我们称之为“Test.sas”:
%let loopTimes=3;
*ProcessBody;
data a;
do x= 1 to &loopTimes;
y=x*x*x;
output;
end;
run;
现在这条线可以正常工作:
Call SubmitSasProg("myuserid", "mypassword", "somepath", "Test", "loopTimes=10")
但是,每当我尝试执行修改文件/库名称等的 SAS 程序时,我都会得到“此 SAS 会话的无效操作”或“用户无权访问”。 请注意,我在本地使用 SAS,而不是在服务器上。 所以我猜我没有正确登录我的 SAS 工作会话并且没有权限。我认为 CreateWorkspaceByServer 中的 userId 和 password 参数应该让我登录。
所以我的问题是如何在本地计算机上使用我的凭据成功启动 SAS 会话,并通过打开窗口环境获得所有正常访问权限。
澄清一下,这个 SAS 流程在窗口环境中可以正常工作:
Data _NULL_;
*x del C:\WINDOWS;
x mkdir C:\Users\Myname\Desktop\NewFolder;
run;
但如果从 VBA 启动,它将失败并显示“此 SAS 会话的无效操作”代码。如果我尝试编写 SAS 数据集,也会发生类似的事情。
我一直在寻找一段时间,但大多数线程都是关于 SAS 服务器会话的。任何帮助,将不胜感激。