2013-07-18 105 views
6

誰かが助けてくれることを願っています。私はVBAからSASを立ち上げるサブルーチンを構築しようとしています。私はSAS Workspace Managerを使用しています。私が私の快適ゾーンからかなり遠くを歩いているので、私はこれらの中で見つけたものをほとんど追ってきました。twosourcesフルアクセスでVBAからSASを実行

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」:ここで私はこれまでのVBAで思い付いたものです

%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のproceedureを実行しようとするたびに/ libnames等私はどちらか「このSASセッションの無効な操作」を得るでしょうか「ユーザーがアクセスを持っていません」。 私はサーバーではなく、ローカルでSASを使用しています。 私は、私のSASワークセッションに正しくログインしておらず、権限がないと推測しています。私はCreateWorkspaceByServerのuserIdとpasswordパラメータが私をログインさせることになっていると思った。

私の質問は、ローカルコンピュータの資格情報でSASセッションを正常に開始し、窓のある環境を開くことによって。

だけ明確にするために、このSASプロセスは、ウィンドウenvironementで正常に動作します:

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

しかし、VBAから開始した場合には、「無効な操作です。このSASセッションのための」コードで失敗します。 SASデータセットを書き込もうとすると、同様のことが起こります。

私はこれまで何度も探していましたが、ほとんどのスレッドはSASサーバーセッションに関するものです。 ご協力いただければ幸いです。

+0

うわー...これはかなり端緒のシナリオです。私の推測では、SASプロセスは、プロセスを起動したプロセスの権利の下で実行されており、VBAプロセスは権利を制限されています(無害なドキュメントに埋め込まれた悪質なスクリプトがマシンを占有するのを防ぐ)。 – JDB

+0

実行しているSASとOSのバージョンはどうですか? –

+0

これはBase SAS 9.2とWin 7 32bです。また、私はこのマシンに管理者アカウントを持っていないことに気付くかもしれませんが、SASウィンドウ環境を邪魔することはありません。私は運営者のアカウントで知っているつもりです。 – Pane

答えて

2

まあ、それが見えます私のシステムで 私は上記のテクニックを使用して、自分のアカウント(duuh)でディレクトリに対する書き込み権限を持っていると仮定してデータセットを書きました。 Allas、xコマンドは頑固で、私は自分自身を管理者アカウントにしないとうまくいかないでしょう。したがって、この問題を解決するには2つの方法があります。 1.管理者権限を取得します。 または 2.ワークスペースマネージャーを忘れてしまいます。 OleObjectsを使用します。

実行時にあまり優雅ではなく、おそらく時間がかかりますが(テストされていません)、OleObjectはSASを最大限に活用します。ここでは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 

あなたが特定のプロセスを実行し、* ProcessBodyと同じように、いくつかのマクロ変数を変更したい場合は、 OleSAS.Submit( "%let" & variable_name & "=" & "yourValue")とOleSAS.Submit( "%include" & your_program)を実行してください。

とにかく、私はWorspace Managerで持っていたログレポートのリターンを失ってしまったのは非常に悲しいです。速いデバッグには本当に素晴らしかったです。 これは役に立ちましたかと思います。

0

以前は、SAS/Intrnetで必要なセキュリティポリシーを設定していないという問題が発生していたことは知っています。私は、これはそれを修正することを保証することはできませんが、それは見て開始するためにどこかにあります:

コントロールパネル - >管理ツール - >ローカルセキュリティポリシー

セキュリティ設定 - >ローカルPolicies-]> [ユーザー権利Assignments->バッチジョブとしてログオンする

SASがジョブを実行するために使用するアカウントにこの権利があることを確認します。

また、データセットを書き込もうとしたためにあなたのtest.sasプログラムが失敗すると言っていますか?

はまた、あなたは私がここに持っていた同じ問題のいくつかを経験することがあります。私の問題のほとんどは、私は管理者ではないんだという事実から幹のような

Using SAS and mkdir to create a directory structure in windows

関連する問題