【问题标题】:SAS libname JSON engine -- Twitter APISAS libname JSON 引擎——Twitter API
【发布时间】:2023-03-27 06:50:02
【问题描述】:

我想使用 SAS libname JSON 引擎而不是 PROC GROOVY 来导入我从 Twitter API 获得的 JSON 文件。我在 OpenSuse LEAP 42.3 上运行 SAS 9.4M4。

我关注了Falko Schulz's description 如何访问 Twitter API,一切正常。直到我想将 JSON 文件导入 SAS。所以最后一行代码是:

proc http method="get"
out=res headerin=hdrin
url="https://api.twitter.com/1.1/search/tweets.json?q=&TWEET_QUERY.%nrstr(&)count=1"
ct="application/x-www-form-urlencoded;charset=UTF-8";
run;

在文件名“res”引用的文件中生成一个 json 文件。

Falko Schulz 使用 PROC GROOVY。然而,在 SAS 9.4M4 中,有一个神秘的 JSON libname 引擎,它让生活变得更轻松。它适用于简单的 JSON 文件。但不适用于 Twitter 数据。因此,从 Twitter 下载 JSON 数据,使用

libname test JSON filref=res;

给我以下错误:

第 1 行第 751 列附近的输入中的 JSON 无效:某些代码点没有 转码。

我怀疑文件的编码有问题,所以我使用了以下形式的文件名声明:

filename res TEMP encoding="utf-8";

运气不好……

我也尝试增加记录长度

filename res TEMP encoding="utf-8" lrecl=1000000;

并玩弄了记录格式...无济于事...

有人可以帮忙吗?我错过了什么?如何在 LIBNAME 语句中使用 JSON 引擎而不遇到此错误?

【问题讨论】:

  • 您的 SAS 会话以什么编码运行? IE,这会返回什么:proc options option=encoding; run;
  • ENCODING=LATIN9,我应该把它改成 UTF-8
  • 是的,很有可能这至少是您问题的一部分。大多数 SAS 安装 9.4+ 还自动包含一个 UTF-8 启动选项(它可能是开始菜单/等中的一个单独的快捷方式)
  • 谢谢。这解决了它!打扰了!
  • 不幸的是,由于 SAS 在处理编码方面的复杂性,这是 SAS 中的一个常见问题;将来可能对其他人有用的问题!

标签: json twitter sas


【解决方案1】:

如果您要将 UTF-8 文件输入 SAS 数据集,请以 UTF-8 模式运行您的 SAS 会话。虽然可以在另一种模式下运行 SAS 并在一定程度上仍然读取 UTF-8 编码的文件,但您通常会遇到很多困难。

您可以使用此代码判断会话的编码方式:

proc options option=encoding;
run;

如果它返回这个:

 ENCODING=WLATIN1  Specifies the default character-set encoding for the SAS session.

那你不是 UTF-8 编码。

桌面上的 SAS 9.4 及更高版本通常安装时会自动选择 UTF-8 选项除了默认 WLATIN1(无论如何安装时都是英文)。您可以在 SAS 9.4 (Unicode Support) 下的开始菜单中找到它,或者使用 SAS Foundation 文件夹的 9.4\nls\u8\ 子文件夹中的 sasv9.cfg 文件找到它。其他早期版本也可能安装了该子文件夹/语言,但并不总是默认安装它。

【讨论】:

  • 每当有人在 SAS 中打开文档时,它应该只打开一个与您聊天的窗口。
  • @RobertPenr​​idge 你最近没有上过 SAS 社区论坛,有吗...我很确定 Reeza 会赢得那一方的胜利;)
  • 所以这个解决方案效果很好。但是,我想知道是否有不涉及更改默认会话编码的解决方案?我可以从我的代码中更改编码选项吗?因此,到目前为止,对我不起作用的是更改文件名语句中的编码选项...
  • @JohannesBleher 更改文件编码允许 SAS 读取它,但会话编码定义了 SAS 数据集的编码方式。如果您的 Twitter 提要中只有可以巧妙地转码为 WLATIN1 的字符,那么您很好;但如果没有,SAS 还能做什么?
  • 您必须在 UTF-8 的会话编码中使用 SAS,才能使数据集在 UTF-8 中实际工作。我不确定这官方是否属实,但似乎总体上还是如此。
猜你喜欢
  • 2022-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-02
  • 1970-01-01
  • 1970-01-01
  • 2012-05-25
  • 1970-01-01
相关资源
最近更新 更多