我想从变量中删除非ASCII字符。我没有用更优雅的方法取得成功,所以我使用压缩和提名我想保留的角色(因为我不知道我想删除的那些)。它的工作原理除了我想保留两个字符"
和'
但我不能正确地将这两个字符都传递给压缩函数。
data _null_;
_text='#AB'!!byte(13)!!'C"D';
_text_select=compress(_text,"ABCDEFGHIJKLMNOPQRSTUVWXYZ /-1234567890(),.'&?;=%:+><`[]*#","k");
put _text;
put _text_select;
run;
答案 0 :(得分:6)
首先,如果您的关注是“控制”。人物,&#39; c&#39;选项很好。
compress(textstr,,'c');
删除ASCII早期的内容,如换行符,标签符等。(可能是前后16个字符来自&#39;&#39; x到&#39; 0F&#39; x,可能&#39; 07&#x; x,虽然我从未见过确切的定义。)
如果你想保留基本上可打印的角色,那么&#39; w&#39;选项很有用。
compress(textstr,,'kw');
如果你的方法可以通过另一个引用来逃避报价,那么你的方法可以成为你想要的唯一方法。
compress(_text,"ABCDEFGHIJKLMNOPQRSTUVWXYZ /-1234567890(),.'&?;=%:+><`[]*#""","k");
您也可以使用&#34; p&#34;保留所有标点符号。事实上,你至少可以简化这一点。
data _null_;
_text='#AB'!!byte(13)!!'C"D';
_text_select=compress(_text," /-()&=%+><` []*#","knp");
put _text;
put _text_select;
run;
我不完全确定正式的标点符号是什么,可能是 - 也是一个,可能是()。
编辑:这是测试所保存内容的好方法(在官方ASCII设置中,即最多为&#39; 7F&#39; 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在那里做错了。老实说,我很想写一张故障单,因为它绝对没有做到它应该做的事情。