从左侧开始的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),那么您实际上不需要这个

我有一个SAS字符串,它总是以日期开头。我想从子字符串中删除日期

数据示例如下(数据没有项目符号,包含项目符号以增加可读性)

  • 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
      。太棒了!谢谢乔(名字也很好——我的儿子、父亲和岳父都叫乔)!