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

时间:2014-04-08 15:04:34

标签: sas teradata

我的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没有改变

2 个答案:

答案 0 :(得分:4)

一种可能性:不是手动删除它,而是“剪切”它,然后将其粘贴到SAS而不是键入'或`字符。

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

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

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

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

现在,您可以查看十六进制输出并确定字符是什么,希望相当容易。每2个十六进制字符映射到一个ASCII字符,除非您处于Unicode环境中,可能不是这种情况(可能是2,可能多达8个)。你应该能够看到'坏'字符。找到后,您可以使用'##'x构建与其相同的字符,然后使用compress将其删除(compress执行您要对{{1}执行的操作}} 更有效率)。 IE,如果你有translate(换行),你可以使用

'0A'x

删除不需要的换行符。

答案 1 :(得分:1)

原谅我,我不知道teradata,但是如果它的问题与sql相同。将文字转换为

'don't'

'don''t'

这可能会有所帮助