我一直在尝试使用 for C# 浏览 SAS 项目的输出数据集SAS.EG.Scripting library
,但我一直得到一个空的数据集集合,即使数据集是在 SAS 服务器上正确生成的。
我尝试按照本文中解释的步骤进行操作,这是我在网络研究中发现的有关 SAS 自动化的唯一资源:不只是用于调度:使用 SAS® Enterprise Guide® 自动化做更多事情。
到目前为止我写的代码如下:
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) 遍历 Code 的 OutputDatasets 集合。这是我得到奇怪行为的地方,因为即使代码成功运行,集合项的计数也设置为零。
有人已经遇到过这种问题吗?我是否忘记在 SAS 命令上写一些关键字或设置所涉及对象的某些属性?
感谢任何帮助。