如何在sas中仅从混合变量列表(num+;char)中提取字符值

如何在sas中仅从混合变量列表(num+;char)中提取字符值,sas,etl,Sas,Etl,在可变列表中,既有数字值也有字符值,如何在sas中仅从中获取字符值。示例数据线仅在一个变量列表VAR1中,其中有一些值,例如: 123 xyz 457 abc 789 frf 233 gth ... 664 fgd 我必须从整个数据行中只提取那些字符值(abc、xyz等),我如何才能得到这些值。看看您是否可以使用这些值 data _null_; var1 = '123, xyz, 456, abc, 789, frf, 233, gth'; var2 = compbl(comp

在可变列表中,既有数字值也有字符值,如何在sas中仅从中获取字符值。示例数据线仅在一个变量列表VAR1中,其中有一些值,例如:

123
xyz
457
abc
789
frf
233
gth
...
664
fgd

我必须从整个数据行中只提取那些字符值(abc、xyz等),我如何才能得到这些值。

看看您是否可以使用这些值

data _null_;
    var1 = '123, xyz, 456, abc, 789, frf, 233, gth';
    var2 = compbl(compress(var1, '', 'ka'));
    put var2=;
run;
编辑:


问题并不十分清楚,但是,如果单个值位于一列中,则可以使用
VERIFY
而不是更复杂的
PRXMATCH

data have;
input var1 $; datalines;
123
xyz
457
abc
789
frf
233
gth
...
664
fgd
;

data want;
  set have;
  where 0 = verify (trim(var1), '0123456789');
run;

返回不在指定数据字符串中的字符串中第一个字符的位置。 ...

详细信息
VERIFY函数返回源中任何摘录中不存在的第一个字符的位置。如果VERIFY在至少一个摘录中找到源中的每个字符,则VERIFY返回0


此代码对我来说运行良好: 数据需求; 集有; 如果prxmatch('/\d+\s*$/',VAR1)>0,则删除;
运行

这是八个独立的变量还是一个包含八个值的变量?一个变量包含八个值数字也是字符。正确的术语应该是非数字。如果VAR1有一千多个值而不是八个值,那么我该怎么办?以前的逗号只是用来分隔值,数据集中没有逗号,这无关紧要。请参阅我编辑的答案。更多值,无逗号。谢谢,需要数据;集有;如果prxmatch('/\d+\s*$/',VAR1)>0,则删除;跑但这个答案对我有用。
data have;
input var1 $; datalines;
123
xyz
457
abc
789
frf
233
gth
...
664
fgd
;

data want;
  set have;
  where 0 = verify (trim(var1), '0123456789');
run;