替换SAS中的特殊字符

时间:2015-07-17 06:42:49

标签: sas

我在SAS中创建了一个逐行读取文本文件的数据集。因此,当我在我的数据集中读取这些行时,我想要消除特殊字符,如*,%, - ,;从该特定行的开头和结尾开始。 我应该使用什么功能?字符可以按任何顺序出现,我必须用空格替换它们。 请帮忙!

3 个答案:

答案 0 :(得分:2)

data forAditi;
    infile datalines truncover;
    format aLine translated parced $80.;
    input @1 aLine $char80.;

**旧学校翻译功能做得很好,但也翻译中间的人物**;

    translated = translate(aLine,' ','* % - ;');

**因此您可能更喜欢正则表达式**;

    retain prx_nr;
    if _N_ EQ 1 then prx_nr =  prxparse('/[ *%-;]*(.+[^ *%-;])/') ;
    match = prxmatch(prx_nr, aLine);
    call prxposn(prx_nr, 1, pos, len);
    substr(parced,pos) = prxposn(prx_nr, 1, aLine);

** [ *%-;]*查找零个或多个特殊字符,.+查找一个或多个字符,[^ *%-;]查找任何非特殊字符。 prxmatch 将查找可能的最长匹配,因此从第一个字符开始,特殊与否,以及最后一个非特殊字符结束。但是, prxposn 会将 pos ition和 len gth设置为(...)中包含的匹配部分,即来自第一个非特殊字符直到最后。现在使用SAS重新初始化其所有变量的事实,除非明确保留,我们只需将该部分复制到正确的位置parced **;

    datalines4;
This is text;
--That should be cleaned up,
And here- you have *% special characters in the middle.
  Blanks at the start should be preserved. Right?
;;;;
run;

答案 1 :(得分:0)

请看看sas中的翻译功能。 第一个参数是你的变量,第二个参数是空白(你将拥有的术语),第三个参数是你需要用第二个参数替换的所有特殊字符的列表。

translate(变量,'','*% - ');

答案 2 :(得分:0)

您可以使用compress功能删除特殊字符,使用已定义的字符列表或“p”选项(删除所有标点符号/特殊字符)。为确保仅在开始/结束时删除它们,请使用substr

/* Assuming 'text' is always 3 or more characters */
data want ;
  set have ;

  strStart = substr(text,1,1) ;
  strEnd   = substr(text,length(text),1) ;
  strMid   = substr(text,2,length(text)-2) ;

  newStart = compress(strStart,,'p') ; /* remove all non-alphanumeric */
  newEnd   = compress(strEnd  ,,'p') ;
  newStr   = cats(newStart,strMid,newEnd) ;
run ;

您可以将所有这些操作合并为一个语句。

相关问题