2017-03-21 4 views
0

私はいつも日付で始まるSAS文字列を持っています。私は部分文字列から日付を削除したい。 test_num15 SAS文字列から文字を削除する左から始める

  • 2016年11月15日| |データの

    例(データが含まれ、可読性を高めるために弾丸を弾丸を持っていません)

    • 2016年10月1日以下であるrecom_1_test1
    • 03/04/2017 | test_0_8_i0 | vacc_previous0

    私は、データが次のようになりたい

    (データは弾丸を持っていませんが、可読性を高めるために弾丸を含みます)
    • test_num15
    • recom_1_test1
    • test_0_8_i0 | vacc_previous0
  • +0

    日付は常にその形式で、常に正確に10文字ですか? 'substr'を使うだけです。 – user667489

    答えて

    0

    これはcall scanのための偉大なユースケースです。あなたの日付の長さが一定(常に10)であれば、実際にはこれを必要としません(startは12となり、substrにスキップします、コメントにuser667489が記載されています)。

    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第三引数を使用して)便利だ場合にのみ、2番目の単語をつかむせます。

    +0

    恐ろしい!ありがとうジョー(偉大な名前も - 私の息子と父と両方の義理の両親はジョーとも呼ばれます)! – AMI

    0

    索引find '|'文字列の位置、substr部分文字列。正規表現を使用してください。

    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; 
    
    関連する問題