Encoding 如何在WLATIN1编码的SAS会话中使用UTF-8编码的文件?
目前,我们正在SAS会话服务器上使用Encoding 如何在WLATIN1编码的SAS会话中使用UTF-8编码的文件?,encoding,character-encoding,sas,Encoding,Character Encoding,Sas,目前,我们正在SAS会话服务器上使用WLATIN1(Windows 1252)编码(而且似乎没有即将转向UTF-8) 我有一个EXCEL文件(它是从internet数据库导出的),用UTF-8编码,包含一个特殊字符≥。我知道我可以使用不同的编码读取EXCEL数据,如UTF-8,但ODS仍将打印=,而不是≥ 我想匹配一些包含这个特殊字符的字符串,但是SAS当然不允许我在本地使用这个字符。有什么办法可以避免这种情况吗 MWE:假设EXCEL文件包含一个变量a和一个观察值a='这是一个测试≥': da
WLATIN1(Windows 1252)编码
(而且似乎没有即将转向UTF-8
)
我有一个EXCEL文件(它是从internet数据库导出的),用UTF-8
编码,包含一个特殊字符≥WLATIN1编码中不支持的代码>。我知道我可以使用不同的编码读取EXCEL数据,如UTF-8
,但ODS
仍将打印=
,而不是≥代码>
我想匹配一些包含这个特殊字符的字符串,但是SAS当然不允许我在本地使用这个字符。有什么办法可以避免这种情况吗
MWE:假设EXCEL文件包含一个变量a
和一个观察值a='这是一个测试≥'代码>:
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 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支持启动会话。命令行是:
"C:\Program Files\SASHome\SASFoundation\9.4\sas.exe"
-CONFIG "C:\Program Files\SASHome\SASFoundation\9.4\nls\u8\sasv9.cfg"
nls\u8\
config文件中的某些行具有编码设置,这些设置只能在会话启动时应用,并且可以路径到支持utf8会话的SAS DLL
…
-SET SASCFG "C:\Program Files\SASHome\SASFoundation\9.4\nls\u8"
-DBCS
-LOCALE en_US
-ENCODING UTF-8
…
在Unicode会话中,下面示例代码的日志将显示≥ and=,ODS将输出≥. 默认SBCS会话中的相同代码≥ 即使在代码编辑器显示≥.
日志窗口的字体应设置为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)会话中显示的代码相同≥ 将被转码到=
NOTE: c1== c2==
NOTE: r1=61 r2=61
NOTE: this is a test = it works
增强型编辑器可能在所有情况下都支持UTF-8,但(我推测)在运行时,提交文件会转换为会话编码。您需要解释如何将Excel文件导入SAS会话。该步骤很可能完全失败,或者可能正在转换字符串。如果没有失败,则使用$hex.
格式显示变量a
的值,以查看其实际包含的内容。SAS的版本和级别是什么?您是对的,即使在WLATIN1
会话中,编辑器本身也是UTF-8
感知的。问题是,我不是唯一一个从事这项工作的人(这也是一个更大项目的一部分),因此将我的本地会话更改为UTF-8
并不是一个真正的选项(尽管它可以工作,谢谢!)。无论如何,我们决定在导出中删除特殊字符(并切换到导出的windows1252
编码)-虽然不理想,但目前还可以。