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

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

目前,我们正在SAS会话服务器上使用
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
编码)-虽然不理想,但目前还可以。