从左侧开始的SAS字符串中删除字符
我有一个SAS字符串,它总是以日期开头。我想从子字符串中删除日期 数据示例如下(数据没有项目符号,包含项目符号以增加可读性)从左侧开始的SAS字符串中删除字符,sas,substring,Sas,Substring,我有一个SAS字符串,它总是以日期开头。我想从子字符串中删除日期 数据示例如下(数据没有项目符号,包含项目符号以增加可读性) 2016年1月10日测试编号15 2016年11月15日|建议测试1 2017年4月3日|测试0 |测试8 |测试0 |之前的vacc | 我希望数据看起来像这样(数据没有项目符号,包括项目符号以增加可读性) 测试编号15 推荐测试1 测试0_8_i0 | vacc_先前0 这是呼叫扫描的一个很好的用例。如果您的日期长度是恒定的(始终为10),那么您实际上不需要这个
- 2016年1月10日测试编号15
- 2016年11月15日|建议测试1
- 2017年4月3日|测试0 |测试8 |测试0 |之前的vacc |
- 测试编号15
- 推荐测试1
- 测试0_8_i0 | vacc_先前0
- 这是
呼叫扫描的一个很好的用例。如果您的日期长度是恒定的(始终为10),那么您实际上不需要这个(start
将是12,然后跳到substr
,如用户667489在注释中所述),但如果不是,这将是有帮助的
data have;
length textstr $100;
input textstr $;
datalines;
10/01/2016|test_num15
11/15/2016|recom_1_test1
03/04/2017|test_0_8_i0|vacc_previous0
;;;;
run;
data want;
set have;
call scan(textstr,2,start,length,'|');
new_textstr = substr(textstr,start);
run;
它还允许您仅在有用的情况下获取第二个单词(使用substr的length
第三个参数)。索引查找字符串中的“|”位置,然后查找substr substring;或者使用正则表达式
data have;
input x $50.;
x1=substr(x,index(x,'|')+1);
x2=prxchange('s/([^_]+\|)(?=\w+)//',1,x);
cards;
10/01/2016|test_num15
11/15/2016|recom_1_test1
03/04/2017|test_0_8_i0|vacc_previous0
;
run;
日期是否总是采用这种格式,并且总是精确到10个字符?只需使用substr
。太棒了!谢谢乔(名字也很好——我的儿子、父亲和岳父都叫乔)!