json - 使用 DS2 和 JSON 包时出错

标签 json sas sas-ds2

我正在尝试使用为 SAS9.3 Maintenance 3 中的 proc ds2 提供的 JSON 包解析 JSON 文件,根据 Chris Hemedinger 的博客文章:

http://blogs.sas.com/content/sasdummy/2015/09/28/parse-json-from-sas/

在我重新启动 SAS session 之前一切似乎都运行良好,现在我不断收到消息:

ERROR: Compilation error.
ERROR: Line 883: Ambiguous method call for method createparser. Multiple method declarations
match the given argument list.

第 883 行(在本例中)指的是包含 createParser 调用的行。下面是一些可以重现错误的简化代码:

data have;
  set sashelp.class;
run;

proc ds2;
  data want;

    dcl package json j();   
    dcl int rc;

    method run();
      set have; 
      rc = j.createParser( name );
    end;

  enddata;
run;
quit;

我做错了什么?

最佳答案

我认为你是对的,这是 SAS 的一个错误,不幸的是,我没有看到一种方法可以向 SAS 确认你使用的是方法 3 而不是方法 4。只需声明 name 作为字符是不够的,出于某种原因。我建议为此向 SAS 开票。

不过,我认为这里的方法 1 比方法 2 好,因为您真的不想指定小费大小。只需将其移至 INIT(它所属的位置)并使用 setparserinput,如 documentation 中所建议的那样:

data have;
  set sashelp.class;
run;

proc ds2;
  data want;

    dcl package json j();   
    dcl double rc;
    method init();
      rc = j.createParser();
      j.setParserInput(name);
    end;

    method run();
      set have; 
    end;

  enddata;
run;
quit;

此外,看起来该示例起作用的原因是 character set 参数。 UTF-8Unicode 将工作(后者由于其他原因实际上不会工作,但不会因这个原因而中断),而 WLatin1ANSIASCII 不会。显然将其设置为 UTF-8 字符会导致 SAS 意识到它确实是字符?

data have;
  set sashelp.class;
run;

proc ds2;
  data want(overwrite=yes);

    dcl package json j();   
    dcl char(50)  character set utf8 name;
    dcl double rc;
    method init();
      rc = j.createParser( name );
    end;

    method run();
      set have; 
    end;

  enddata;
run;
quit;

关于json - 使用 DS2 和 JSON 包时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39878657/

相关文章:

email - 如何通过电子邮件从 SAS DIS 发布(csv、xlsx 等)文件

linux - 在 Linux 服务器上生成日志文件的 SAS X 命令语法

sas - PROC DS2 性能问题

multithreading - SAS proc ds2 YEAR 函数

multithreading - 将数据子集发送到 SAS DS2 线程

sql - 转义 JSON 输出的特殊字符

ios - iOS 获取请求的最佳实践

javascript - 使用复选框从表中选择时添加两次数据

javascript - 使用困惑的查询(HTML 表)从 JSON url 添加数据

sas - 基于宏变量的 INTNX 函数