目前,我们正在使用 WLATIN1 (Windows 1252) encoding
在我们的 SAS session 服务器上(似乎没有即将转移到 UTF-8
)。
我有一个用 UTF-8
编码的 EXCEL 文件(从 Internet 数据库导出)并包含一个特殊字符 ≥
不支持 Wiki refernce ) 在 WLATIN1 encoding
.我知道我可以使用不同的编码(如 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 开始菜单中的图标深处的 Unicode 支持来启动 session 。命令行是:
"C:\Program Files\SASHome\SASFoundation\9.4\sas.exe"
-CONFIG "C:\Program Files\SASHome\SASFoundation\9.4\nls\u8\sasv9.cfg"
nls\u8\
config 文件将包含一些只能在 session 启动时应用的编码设置行,以及支持 utf8 session 的 SAS dll 的路径。…
-SET SASCFG "C:\Program Files\SASHome\SASFoundation\9.4\nls\u8"
-DBCS
-LOCALE en_US
-ENCODING UTF-8
…
在 Unicode session 中,以下示例代码的日志将显示 ≥ 和 = 之间的区别,并且 ODS 将输出 ≥。默认 SBCS session 中的相同代码 ≥ 映射到 = 即使代码编辑器显示 ≥。
LOG 窗口的字体应设置为
Consolas
或其他支持 UTF-8 的字体。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
默认 (SBCS) session 中的相同代码显示 ≥ 将被转码为 =
NOTE: c1== c2==
NOTE: r1=61 r2=61
NOTE: this is a test = it works
增强型编辑器可能在所有情况下都支持 UTF-8,但是(我推测)在运行时提交被转码为 session 编码。
关于encoding - 如何在 WLATIN1 编码的 SAS session 中使用 UTF-8 编码的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55168434/