SAS libname JSON引擎-Twitter API

Joh*_*her 5 twitter json sas

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

我按照Falko Schulz的描述来访问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;
Run Code Online (Sandbox Code Playgroud)

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

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

libname test JSON filref=res;
Run Code Online (Sandbox Code Playgroud)

给我以下错误:

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

我怀疑文件的编码有问题,因此我使用了以下形式的文件名语句:

filename res TEMP encoding="utf-8";
Run Code Online (Sandbox Code Playgroud)

没有运气...

我也尝试增加记录长度

filename res TEMP encoding="utf-8" lrecl=1000000;
Run Code Online (Sandbox Code Playgroud)

并以记录格式播放...无济于事...

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

Joe*_*Joe 3

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

您可以使用以下代码判断您的会话采用什么编码:

proc options option=encoding;
run;
Run Code Online (Sandbox Code Playgroud)

如果它返回这个:

 ENCODING=WLATIN1  Specifies the default character-set encoding for the SAS session.
Run Code Online (Sandbox Code Playgroud)

那么你就没有使用UTF-8编码。

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