如何处理单引号和不可翻译的字符



我的SAS表包含一个包含句子的文本列。其中一些句子包含类似don't , space's . .的单引号。每当我试图将此表上传到teradata时,它都会抛出一个错误string contains untranslatable characters

当我手动删除'时,它可以正常上传。

如何以原始方式正确上传原始句子?


我怀疑这不是一个常规的单一报价

我试过

varName = tranwrd(varName, "'",""); /* i also tried using ` instead of '  */

varName = translate(varName, "","'"); /* i also tried using ` instead of '  */

但是字符串dod不会改变

一种可能性:与其手动删除它,不如"剪切"它,然后将其粘贴到SAS中,而不是键入"或"字符。

更一般地说,您可以通过查看角色的$HEX.版本来确定角色的实际内容。

一个好的方法是首先删除已知的"好"字符。

data want;
set have;
step1 = compress(yourvar,,'ns');
put step1= $HEX.;
run;

这将删除(英文)字母和数字、下划线和空格类型的字符(空格、制表符等)。这将使字符串减少到相对较少的字符数;如果要进一步限制它,请在(当前缺少的)第二个参数中添加字符。

现在,您可以查看十六进制输出并确定字符是什么,希望非常容易。每2个十六进制字符映射到一个ASCII字符,除非您在Unicode环境中,否则情况可能并非如此(可能是2个,也可能多达8个)。你应该能够看到"坏"字。一旦找到它,就可以使用'##'x来构造与它相同的字符,并使用compress来移除它(compress可以更有效地执行您试图使用translate执行的操作)。IE,如果你有'0A'x(换行),你可以使用

data want;
set have;
fixed=compress(yourvar,'0A'x);
run;

以去除不需要的换行。

请原谅,我不知道teradata,但如果它和sql一样有问题的话。从类似的内容转换文本

'don't'

'don''t'

这可能有助于

最新更新