我的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没有改变
答案 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'
这可能会有所帮助