我想从变量中去除非 ASCII 字符。我没有用更优雅的方法取得成功,所以我使用压缩并指定我想保留的字符(因为我不知道我想删除的字符)。除了我想保留 "
和 '
这两个字符外,它可以正常工作,但我无法将这两个字符都正确地传递到压缩函数中。
data _null_;
_text='#AB'!!byte(13)!!'C"D';
_text_select=compress(_text,"ABCDEFGHIJKLMNOPQRSTUVWXYZ /-1234567890(),.'&?;=%:+><`[]*#","k");
put _text;
put _text_select;
run;
最佳答案
首先,如果您关心的是“控制”字符,那么“c”选项是个不错的选择。
compress(textstr,,'c');
这会删除 ASCII 早期部分的内容,例如换行符、制表符等(可能是从 '00'x 到 '0F'x 的前 16 个字符,也可能是 '07'x,尽管我从来没有看到了一个确切的定义。)
如果您想基本上保留“可打印字符”,“w”选项会很有帮助。
compress(textstr,,'kw');
您的方法可以工作,如果它是唯一的方法,您可以通过用另一个引号转义引号来完成您想要的事情。
compress(_text,"ABCDEFGHIJKLMNOPQRSTUVWXYZ /-1234567890(),.'&?;=%:+><`[]*#""","k");
您也可以使用“p”来保留所有标点符号。事实上,您至少可以简化它。
data _null_;
_text='#AB'!!byte(13)!!'C"D';
_text_select=compress(_text," /-()&=%+><` []*#","knp");
put _text;
put _text_select;
run;
我不完全确定什么是正式的“标点符号”,可能 - 也是一个,也可能是 ()。
编辑:这是测试保留内容的好方法(在官方 ASCII 集中,即最多 '7F'x):
data test;
length _text $255;
do _t = 1 to 255;
_text =byte(_t)||_text;
end;
_text_select=compress(_text," /-(),.'&""?;=%:+><`[]*#","kn");
put _text=;
put _text_select=;
run;
P 似乎保留了很多有点奇怪的东西,其中一些显然不是标点符号,所以很明显 SAS 在那里做错了。老实说,我很想写一张故障单,因为它肯定没有按照它应该做的那样做。
关于sas - 使用压缩去除字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23658856/