如何解决如何使用SAS数组通配符创建名称以某个字符串结尾的变量数组?
我有类似的代码:
data input;
input yr $ lob $ type $
allow_P25 los_P25 adm_P25;
cards;
2019 Com AMB 205.4 3.56 3444
2019 Med DME 34.4 1.11 533
;
run;
data results;
length perc_type $15 perc_value 8;
set input;
array change _numeric_;
do over change;
perc_type = vname(change);
perc_value = change;
output results;
end;
run;
此代码创建所有数字变量的数组。但是,我现在需要创建一个名称以 P25
结尾的变量数组有没有一种使用通配符的方法?我在互联网上找到了一些使用通配符的解决方案,但是它们似乎总是在变量名的末尾。如果我想在变量名的开头使用通配符怎么办?我尝试了这个(显然是错误的解决方案)
data results;
length perc_type $15 perc_value 8;
set input;
array change :P25;
do over change;
perc_type = vname(change);
perc_value = change;
output results;
end;
run;
解决方法
作为一种解决方法,您可以使用_numeric_
来匹配prxmatch(perl_regex,string)
数组的后缀,并且仅在找到匹配项时才执行操作。
代码
data results;
length perc_type $15 perc_value 8;
set input;
array change _numeric_;
do over change;
/* match vnames ending with P25 */
if (prxmatch("/P25$/",vname(change)) > 0) then do;
/* do whatever you want */
perc_type = vname(change);
perc_value = change;
output results;
end;
end;
run;
输出
| Obs | perc_type | perc_value | yr | lob | type | allow_P25 | los_P25 | adm_P25 |
|-----|----------:|------------|------|-----|-----:|----------:|--------:|---------|
| 1 | allow_P25 | 205.40 | 2019 | Com | AMB | 205.4 | 3.56 | 3444 |
| 2 | los_P25 | 3.56 | 2019 | Com | AMB | 205.4 | 3.56 | 3444 |
| 3 | adm_P25 | 3444.00 | 2019 | Com | AMB | 205.4 | 3.56 | 3444 |
| 4 | allow_P25 | 34.40 | 2019 | Med | DME | 34.4 | 1.11 | 533 |
| 5 | los_P25 | 1.11 | 2019 | Med | DME | 34.4 | 1.11 | 533 |
| 6 | adm_P25 | 533.00 | 2019 | Med | DME | 34.4 | 1.11 | 533 |
注释
SAS阵列无法像其他语言一样工作。 SAS数组是对一组变量的引用。因此,如果没有魔术方法,只需首先直接获得内置的_numeric_
组,然后再过滤变量名即可。
另请参阅SAS正则表达式中的official docs。
,没有直接的SAS语法允许这样做。尽管已经编写了宏来处理此类问题。
在Roger's Github Series.str.contains
上看到一些。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。