首页 > 解决方案 > varchar 类型的 SQL 列在读入 SAS 时创建 � 符号

问题描述

标签: sql-servercharacter-encodingsasssms

解决方案


在 ASCII 中,“U+FFFD � REPLACEMENT CHARACTER”用于替换未知、无法识别或无法表示的字符。如果这是唯一导致您出现问题的字符,您可以简单地将其转换为破折号。

例如,让我们用破折号替换 � 值:

data have;
    length character $20.;
    infile datalines dlm=',';
    input character$;
    datalines;
Sugar�free
Camera�ready
Custom�built
;
run;

data want;
    set have;

    character = tranwrd(character, '�', '-');
run;

如果这不起作用,这里有一个替代选项。

第 1 步:查找字符的单个示例并获取其 ASCII 十六进制代码

data hex_code;
    set have(obs=1);
    ascii_hex = put(substr(character, 6, 1), $hex.);
run;

在这种情况下,十六进制代码是1A. 我们可以将其用作十六进制文字来替换有问题的字符。

第 2 步:tranwrd与您找到的十六进制文字一起使用

SAS 会自动理解'1A'x为十六进制值,并会在字符串中搜索它。如果找到,tranwrd将用破折号替换所有实例。

data want;
    set have;

    character = tranwrd(character, '1A'x, '-');
run;

推荐阅读