sas - 使用压缩去除字符

标签 sas

我想从变量中去除非 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/

相关文章:

sas - 使用输入捕获该行的其余部分

sas - SAS 中的并行处理,等待空闲 session

sas - 在 EG 中运行 SAS 代码而不触发与程序关联的提示

sql - 用于实验室值的 SAS 宏

mysql - 所有数据库的通用数据类型应该是什么

csv - 手动将 csv 文件的特定部分读入 SAS

linux - 在 Linux 服务器中查找并保存 SAS-Studio 程序的当前目录

sas - 如何获取SAS(proc phreg)中估计参数的值?

SAS——滞后函数的采用

sas - 在 SAS 用户定义函数中使用变量