在SAS中输入带空格的字符串

时间:2015-04-21 16:42:59

标签: regex sas

我正在将字符串输入SAS中的数据集。这是我的代码。

data match;
input string1 $1-6
      string2 $10-15
      string3 $18-21;
position1=prxmatch('/^a/', string1);
position2=prxmatch('/a$/', string2);
position3=prxmatch('/^a.a$/', string3);
datalines;
abc      aba     aa
abcde    abcba   abba
 abcde   aaaaa   a.a
                 a$a
;
run;

您可能会注意到,第一列abcde的最后一行以空格开头。此外,第二列aaaaa的最后一个字符串也以空格结尾。除了这两个,其他字符串就是他们自己。

我使用prxmatch进行正则表达式匹配。所以prxmatch('/^a/', ' abcde')应该返回0,而prxmatch('/a$/', 'aaaaa ')也应该返回0。

然而,结果如下:

System Results

那么,我该怎么做才能正确输入这些字符串并获得正确的正则表达式匹配结果?

2 个答案:

答案 0 :(得分:4)

您可以使用$CHARw.信息来读取初始空格。我更喜欢@pos以这种方式阅读:

data match;
input @1 string1 $char6.
      @10 string2  $char6.
      @18 string3  $char4.;
  position1=prxmatch('/^a/', string1);
  position2=prxmatch('/a$/', string2);
  position3=prxmatch('/^a.a$/', string3);
datalines;
abc      aba     aa
abcde    abcba   abba
 abcde   aaaaa   a.a
                 a$a
;
run;

我认为现在可以恢复你的期望。 (您可能打算STRING3只有3个宽?)

答案 1 :(得分:0)

如果要在每列的开头或结尾允许空格,请使用\s*

position1=prxmatch('/^\s*a/', string1);
position2=prxmatch('/a\s*$/', string2);
position3=prxmatch('/^a.a$/', string3);