2017-10-16 123 views
4

我想使用SAS libname JSON引擎而不是PROC GROOVY來導入我從Twitter API獲得的JSON文件。我在OpenSuse LEAP 42.3上運行SAS 9.4M4。SAS libname JSON引擎 - Twitter API

我跟着Falko Schulz's description在如何訪問Twitter API和everthing工作得很好。直到我想將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; 

其產生與文件名「資源」引用的文件中的JSON文件。

Falko Schulz使用PROC GROOVY。然而,在SAS 9.4M4中,有這個神祕的JSON libname引擎,使生活更輕鬆。它適用於簡單的JSON文件。但不適用於Twitter數據。因此,有來自Twitter的JSON數據下載,使用

libname test JSON filref=res; 

給了我以下錯誤:

Invalid JSON in input near line 1 column 751: Some code points did not transcode.

我懷疑的東西是錯誤的文件,所以我使用的文件名語句中的編碼形式:

filename res TEMP encoding="utf-8"; 

沒有運氣...

我也試圖增加ŧ他記錄長度

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

,並與記錄格式...無濟於事玩耍了......

有人能幫忙嗎?我錯過了什麼?如何在LIBNAME語句中使用JSON引擎而不會遇到此錯誤?

+1

您的SAS會話正在運行什麼編碼? IE,這是什麼回報:'proc option option = encoding; run;' – Joe

+0

ENCODING = LATIN9,我應該將其改爲UTF-8 –

+1

是的,這很有可能是您的問題的一部分。大多數SAS安裝9.4+都會自動包含一個UTF-8啓動選項(它可能是開始菜單/等中的一個單獨的快捷方式) – Joe

回答

2

如果您要將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文件。其他早期版本也可能安裝了該子文件夾/語言,但並不總是默認安裝它。

+0

每當有人提出SAS文檔時,應該只是打開一個聊天窗口。 –

+0

@RobertPenr​​idge你最近還沒有在SAS社區論壇上有過......我相當確定Reeza在那邊贏得了那一手;) – Joe

+0

所以這個解決方案工作得非常好。不過,我想知道是否有解決方案,不涉及更改默認會話編碼?我可以在我的代碼中更改編碼選項嗎? 到目前爲止,對我而言,什麼都不起作用,改變了文件名語句中的編碼選項...... –