如何在WLATIN1编码的SAS会话中使用UTF-8编码文件



当前,我们在SAS Session Server上使用WLATIN1 (Windows 1252) encoding(似乎没有即将到UTF-8的转移)。

i具有UTF-8中编码的Excel文件(这是Internet数据库的导出),并包含WLATIN1 encoding中不支持Wiki Refernce的一个特殊字符。我知道我可以使用其他编码(例如UTF-8)在Excel数据中阅读,但ODS仍然会打印=而不是

我想匹配一些包含这个特殊角色的字符串,但是SAS当然不允许我本地使用此字符。有什么方法可以绕过这个?

MWE:假设Excel文件包含一个变量a和一个观察结果a = 'this is a test ≥'

data encoding;
set excel;
if a ='this is a test ≥' then
put 'it works';
else 
put 'it does not work';
run;

可以以任何方式修复吗?我尝试了'(*ESC*){unicode "2265"x}'而不是,但无法使其工作。与往常一样,任何帮助/想法都非常感谢!

编辑:我们正在运行SAS Release 9.4 TS1M5。当前,Excel文件的读数是通过使用PROC IMPORT完成的:

filename temp "*.xlsx" encoding="utf-8";
proc import datafile=temp out=quality dbms=excel replace;
run;

如果您在SAS服务器环境中,则需要设置具有Unicode支持启动设置的服务器。

在桌面环境中,可以从SAS START菜单中的Icon支持Unicode支持开始会话。命令行是:

"C:Program FilesSASHomeSASFoundation9.4sas.exe" 
           -CONFIG "C:Program FilesSASHomeSASFoundation9.4nlsu8sasv9.cfg"

nlsu8配置文件将具有一些具有编码设置的行,这些线路只能在会话的启动时应用,以及向支持UTF8会话的SAS DLLS的路径。

…
-SET SASCFG "C:Program FilesSASHomeSASFoundation9.4nlsu8"
-DBCS 
-LOCALE en_US
-ENCODING UTF-8
…

在Unicode会话中,以下样本代码的日志将显示≥和=之间的歧视,OD将输出≥。默认SBCS会话中的相同代码≥即使代码编辑器显示≥。

日志窗口的字体应设置为Consolas或其他UTF-8 Aware Font。

data have;
input; a = _infile_; datalines;
this is a test ≥
run;
data want;
  set have;
  c1 = '≥';
  c2 = '=';
  put "NOTE: " (c:) (=);
  r1 = rank(c1);
  r2 = rank(c2);
  put "NOTE: " (r:) (=);
  if a = 'this is a test ≥' 
    then put "NOTE: " a 'it works';
    else put "NOTE: " a 'it does not work';
run;
proc print data=want;
run;
--------------------
NOTE: c1== c2==
NOTE: r1=226 r2=61
NOTE: this is a test = it works

默认情况(SBC)会话显示≥的相同代码将被转码=

NOTE: c1== c2==
NOTE: r1=61 r2=61
NOTE: this is a test = it works

在所有情况下,增强的编辑器都可能意识到UTF-8,但是(我推测)在运行提交时,将其转码为会话编码。

最新更新