当前,我们在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,但是(我推测)在运行提交时,将其转码为会话编码。