我正在将字符串输入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。
然而,结果如下:
那么,我该怎么做才能正确输入这些字符串并获得正确的正则表达式匹配结果?
答案 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);