2013-07-18 21 views
6

Mam nadzieję, że ktoś może pomóc. Próbuję zbudować podprogram do uruchomienia SAS z VBA. Robiłem to z SAS Workspace Manager. Gdy przechodzę dość daleko od mojej strefy komfortu, śledzę głównie to, co znalazłem w tych twosources. Oto co wymyśliłem tak daleko w VBA:Uruchom SAS z VBA z pełnym dostępem

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 

I muszę sobie mały program SAS, nazwijmy go „Test.sas”:

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

Teraz ta linia będzie działać Juste porządku :

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

Ale gdy próbuję wykonać proceedure SAS, który modyfikuje pliki/libnames itp dostanę albo „Operacja niemożliwa dla tej sesji SAS” lub „Użytkownik nie ma dostępu”. Należy pamiętać, że używam SAS lokalnie, a nie na serwerze. Zgaduję więc, że nie jestem poprawnie zalogowany z moją sesją SAS i brakiem pozwolenia. Myślałem, że parametry userID i password w CreateWorkspaceByServer mają mnie zalogować.

Moje pytanie brzmi: jak z powodzeniem uruchomić sesję SAS z moimi danymi uwierzytelniającymi na moim lokalnym komputerze i mieć dostęp do wszystkich normalnych uprawnień otwierając otoczenie okienne.

Wystarczy, aby wyjaśnić ten proces SAS będzie działać dobrze w okienkowym environement:

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

Ale to nie z „Operacja niemożliwa dla tej sesji SAS” kodu, jeśli zaczęło się od VBA. Coś podobnego się dzieje, gdy próbuję pisać zestawy danych SAS.

Już od jakiegoś czasu szukam, ale większość wątków dotyczy sesji serwerów SAS. Każda pomoc będzie doceniona.

+0

Wow ... jest to scenariusz skrajnej krawędzi. Domyślam się, że proces SAS działa zgodnie z prawami procesu, który go uruchomił i że proces VBA ma ograniczone prawa (aby zapobiec umieszczaniu złośliwych skryptów osadzonych w niewinnie wyglądających dokumentach na komputerze). – JDB

+0

Jaką wersję SAS i OS używasz? –

+0

To byłby Base SAS 9.2 i Win 7 32b. Warto również zauważyć, że nie mam konta administratora na tym komputerze, ale nie przeszkadza to środowisku w oknie SAS. Spróbuję szczęścia z kontem administratora ... kto wie. – Pane

Odpowiedz

2

Cóż, wygląda na to większość moich problemów wynikających z faktu, że nie jestem administratorem w moim systemie. Udało mi się napisać zestawy danych z powyższą techniką, biorąc pod uwagę, że mam uprawnienia do zapisu w katalogu z moim kontem (duuh). Allas, polecenie x jest uparte i nie zadziała, bo nie mam konta administratora. Więc dwie możliwości rozwiązania tego problemu: 1. Uzyskaj uprawnienia administratora. lub 2. Zapomnij o menedżerze przestrzeni roboczej. Użyj OleObjects.

Podczas gdy mniej elegancki i być może bardziej czasochłonny po wykonaniu (nie testowany), OleObject pozwoli mi w pełni wykorzystać SAS. Oto kod 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 

Jeśli chcesz uruchomić konkretny proces i zmienić niektóre zmienne makra, tak jak w * ProcessBody; po prostu wykonaj OleSAS.Submit ("% let" & zmienna nazwa & "=" & "twoja wartość") i OleSAS.Submit ("% include" & your_program).

W każdym razie, jestem dość smutny z powodu utraty raportu z raportu, który miałem z Worspace Manager, był naprawdę świetny do szybkiego debugowania. Mam nadzieję, że to było przydatne.

0

Wiem, że wcześniej miałem problemy z SAS/Intrnet nie ma wymaganych ustawień zasad zabezpieczeń. Nie mogę zagwarantować, że będzie to naprawić, ale to gdzieś zacząć szukać:

Panel sterowania> Narzędzia- administracyjne> Zasady zabezpieczeń lokalnych

Bezpieczeństwo Ustawienia-> Lokalne Policies-> Prawa użytkownika Assignments-> Zaloguj się jako zadanie wsadowe

Upewnij się, że to konto, którego używa SAS do uruchamiania zadań, ma to prawo.

Co więcej, czy program test.sas nie działa, ponieważ próbuje zapisać zestaw danych?

Ponadto, może być to niektóre z tych samych zagadnień, jakie miałem tutaj:

Using SAS and mkdir to create a directory structure in windows