office microsoft libreria library for bibliotecas vba session login sas workspace

microsoft - Ejecute SAS desde VBA con acceso completo



vba for excel (2)

Espero que alguien pueda ayudar. Estoy intentando construir una subrutina para lanzar SAS desde VBA. Lo he estado haciendo con SAS Workspace Manager. Como estoy paseando bastante lejos de mi zona de confort, he seguido principalmente lo que encontré en estas dos fuentes . Esto es lo que se me ocurrió hasta ahora en 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

Y tengo un pequeño programa SAS, llamémoslo "Test.sas":

%let loopTimes=3; *ProcessBody; data a; do x= 1 to &loopTimes; y=x*x*x; output; end; run;

Ahora esta línea funcionará juste fine:

Call SubmitSasProg("myuserid", "mypassword", "somepath", "Test", "loopTimes=10")

Pero cada vez que intento ejecutar un procedimiento SAS que modifica los archivos / nombres de las libreas, etc. Obtendré una "Operación inválida para esta sesión SAS" o "El usuario no tiene acceso". Tenga en cuenta que estoy usando SAS localmente, no en un servidor. Así que supongo que no he iniciado sesión correctamente con mi sesión de trabajo de SAS y no tengo permiso. Pensé que los parámetros userId y password en CreateWorkspaceByServer deberían iniciar sesión.

Así que mi pregunta sería cómo iniciar con éxito la sesión de SAS con mis credenciales en mi computadora local y tener todo el acceso normal que tendría al abrir el entorno con ventana.

Solo para aclarar, este proceso de SAS funcionaría bien en el entorno de ventana:

Data _NULL_; *x del C:/WINDOWS; x mkdir C:/Users/Myname/Desktop/NewFolder; run;

Pero fallaría con un código de "Operación no válida para esta sesión SAS" si se inició desde VBA. Algo similar sucede si intento escribir conjuntos de datos SAS.

He estado buscando algo de tiempo ahora, pero la mayoría de los hilos son sobre sesiones de servidor SAS. Cualquier ayuda sería apreciada.


Bueno, parece que la mayoría de mis problemas provienen del hecho de que no soy administrador de mi sistema. Logré escribir conjuntos de datos con la técnica anterior dado que tengo privilegios de escritura en el directorio con mi cuenta (duuh). Allas, el comando x es terco y no funcionará, a menos que obtenga una cuenta de administrador. Entonces, dos opciones para "resolver" este problema: 1. Obtenga privilegios de administrador. o 2. Olvídese del administrador del espacio de trabajo. Use OleObjects.

Aunque menos elegante y tal vez requiera más tiempo en la ejecución (no probado), OleObject me permitirá usar SAS en toda su extensión. Aquí está el código de VBA:

Dim OleSAS As Object Set OleSAS = CreateObject("SAS.Application") OleSAS.Visible = True OleSAS.Top = 1 OleSAS.Title = "Automation Server" OleSAS.Wait = True OleSAS.Submit(yourSAScode) OleSAS.Quit Set OleSAS = Nothing

Si desea ejecutar un proceso específico y cambiar algunas variables de macro como con * ProcessBody; solo haga OleSAS.Submit ("% let" & nombre_variable & "=" & "yourValue") y OleSAS.Submit ("% include" & your_program).

De todos modos, estoy muy triste de perder el retorno del informe de registro que tenía con el administrador de Worspace, fue realmente genial para la depuración rápida. Espero que esto haya sido útil.


Sé que anteriormente tuve problemas con SAS / Intrnet que no tenían la configuración de políticas de seguridad necesaria. No puedo garantizar que esto lo arregle, pero es un lugar para comenzar a buscar:

Panel de control-> Herramientas administrativas-> Política de seguridad local

Configuración de seguridad-> Políticas locales-> Asignaciones de derechos de usuario-> Inicie sesión como un trabajo por lotes

Asegúrese de que la cuenta que SAS utilizará para ejecutar los trabajos tenga este derecho.

Además, ¿está diciendo que su programa test.sas falla porque intenta escribir un conjunto de datos?

Además, es posible que experimente algunos de los mismos problemas que he tenido aquí:

Usar SAS y mkdir para crear una estructura de directorios en Windows