1

我一直在尝试使用 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 命令上写一些关键字或设置所涉及对象的某些属性?

感谢任何帮助。

4

1 回答 1

4

我写了你引用的那篇论文。

SAS Enterprise Guide 4.3 发布后有一些与自动化相关的修复。你没有在这里说你有哪个版本,但这个问题最好由 SAS 技术支持人员跟踪,他们可以就修补程序提供建议。

此外,为了更深入地了解 SAS 专业知识,请考虑将此类问题发布到SAS Enterprise Guide 讨论论坛

于 2012-09-21T17:28:38.927 回答