SAS:在字符串中找到引号

时间:2016-08-05 13:57:09

标签: sas

我的引号类似于“在各个未知位置的字符串内部。我想找到/删除它们。

我正在将tranwrd()函数用于我想删除的其他字符(例如+,-&等)。

有谁知道怎么做?

2 个答案:

答案 0 :(得分:2)

使用compress()功能。第一个参数是要修改的字符串,第二个参数是要删除的字符列表。我已将该字符列表放在单引号中,以便宏处理器不会拾取%&个字符。

data want;
  tmp = '+blah -&blah'' "blah';
  want = compress(tmp,'+-&''"%');
  put tmp= want=;
run;

或者,compress()函数提供了一些很好的方法来保留某些字符。在下面的示例中,我告诉它使用第三个参数中的k修饰符来保留字符。它将保留的字符是空格字符(我在第二个参数中列出的)和数字,下划线字符和英文字母(由第三个参数中的n修饰符指定)。

data want;
  tmp = '+blah -&blah'' "blah';
  want = compress(tmp,' ','nk');
  put tmp= want=;
run;

答案 1 :(得分:1)

如果您询问如何将引号字符放在文字字符串中,则有两种选择。

首先,SAS允许使用'"。你可以把一个放在另一个。

data want;
  x = '"Dear me", she said.';
  y = compress(x,'"');
  put x= y=;
run;

其次,如果您有宏变量或两种引号都更有用,引号字符加倍可以逃脱它。

data want;
  x = '"Dear me, please don''t do that", she said.';
  y = compress(x,'"''');
  put x= y=;
run;

请注意,在第二个示例的两个位置,我放了两个'个字符(x赋值和y压缩)。

Compresstranwrd在这里的工作方式相同(如果你有tranwrd优于你的使用的原因),就像任何其他SAS函数或语言元素一样。

第二 - 对于多个功能,包括compress但不包括tranwrdtranslate - 有一个可选参数,可让您添加特定类型的所有字符。 Compress出于某些原因,不像某些人那样支持q,但它确实支持p标点符号。这可能是期望的,也可能不是。

data want;
  x = '"Dear me, please don''t do that", she said.';
  y = compress(x,,'p');
  put x= y=;
run;

或者,如果你有 的字符列表,k可以让你keep

data want;
  x = '"Dear me, please don''t do that", she said.';
  y = compress(x,'.,','kas');
  put x= y=;
run;

保留句号,逗号,a-z字符和空格字符,删除所有其他字符。

另一个有趣的观点:dequote()将删除的引号,如果你有它们 - 也就是说,如果你只是想删除围绕你的字符变量的引号或类似的东西这一点。