for C#を使用して SAS プロジェクトの出力データセットをナビゲートしようとしましたがSAS.EG.Scripting library
、データセットが SAS Server で正しく生成されているにもかかわらず、データセットの空のコレクションを取得し続けます。
この記事で説明されている手順を実行しようとしました。この記事は、SAS オートメーションに関する唯一のリソースであり、Web を調査して見つけたものです: Not Just for Scheduling: Doing More with SAS® Enterprise Guide® Automation .
これまでに書いたコードは次のとおりです。
public static void RunSASProject()
{
SAS.EG.Scripting.Application EGApp = new SAS.EG.Scripting.Application();
EGApp.SetActiveProfile("almarci");
SAS.EG.Scripting.Project EGProject = (SAS.EG.Scripting.Project)EGApp.New();
SAS.EG.Scripting.Code oCode = (SAS.EG.Scripting.Code)EGProject.CodeCollection.Add();
try
{
oCode.Server = "SASCORP";
oCode.UseApplicationOptions = false;
oCode.GenSasReport = false;
oCode.Name = "Testing";
oCode.Text = "LIBNAME SRC '/home/cau004/aj/dccvoj/sotcpc/giad/workgroup/Apoio'; DATA SRC.CARS; SET SASHELP.CARS; OUTPUT; RUN;";
oCode.Run();
oCode.Log.SaveAs(@"C:\Users\almarci\Desktop\SAS\LogSAS" + DateTime.Now.ToString("ddmmyyyy HHmmss") + ".log");
oCode.TaskCode.SaveAs(@"C:\Users\almarci\Desktop\SAS\TaskSAS" + DateTime.Now.ToString("ddmmyyyy HHmmss") + ".txt");
SAS.EG.Scripting.OutputDatasets outputDatasets = (SAS.EG.Scripting.OutputDatasets)oCode.OutputDatasets;
foreach (SAS.EG.Scripting.OutputData outputData in outputDatasets)
{
Console.Write(outputData.Name.ToString());
}
}
catch (Exception ex)
{
Console.WriteLine("\n" + ex.Message.ToString());
}
finally
{
EGApp.Quit();
}
}
実行する基本的な手順は次のとおりです
。1) Application オブジェクトをインスタンス化します。
2) サーバーへの接続に使用されるプロファイルを定義します。
3) 新しいプロジェクトを作成します。
4) 最近作成したプロジェクトに Code オブジェクトを追加します。
5) コード オブジェクトのプロパティを設定します (名前、テキスト - 実行される SAS コマンド)。
6) コード オブジェクトを実行します。
7) コード ログとコマンド テキストを .txt ファイルに保存します。
8) コードの OutputDatasets コレクションを反復処理します。コードが正常に実行されても、コレクション項目のカウントがゼロに設定されるため、ここで奇妙な動作が発生します。
誰もがすでにこの種の問題に直面していますか? SAS コマンドにキーワードを書き忘れたり、関連するオブジェクトのプロパティを設定するのを忘れていませんか?
どんな助けにも感謝します。