【问题标题】:SAS: Specify newline character when input a text fileSAS:输入文本文件时指定换行符
【发布时间】:2017-12-14 16:53:03
【问题描述】:

我对 SAS 很陌生,有一个非常简单的问题。我有一个这样保存的文本文件:

123,123,345,457,4.55~123,123,345,457,4.55~123,123,345,457,4.55

所以所有数据都写在一行中。 ~ 字符表示换行符。我的最终目标是将文本文件加载到 sas 中并创建一个 SAS 数据集,该数据集应如下所示:

V1  V2  V3  V4  V5 
123 123 345 457 4.55
123 123 345 457 4.55
123 123 345 457 4.55

所以',' 是分隔符,'~' 是换行符。 我怎样才能做到这一点?

非常感谢您的回复。

亲切的问候 构成

【问题讨论】:

    标签: sas newline


    【解决方案1】:

    只需告诉 SAS 使用这两个字符作为分隔符并将 @@ 添加到 input 语句以防止它进入新行。

    data want ;
      infile cards dsd dlm=',~';
      input v1-v5 @@ ;
    cards;
    123,123,345,457,4.55~123,123,345,457,4.55~123,123,345,457,4.55
    ;;;;
    

    结果

    Obs     v1     v2     v3     v4     v5
     1     123    123    345    457    4.55
     2     123    123    345    457    4.55
     3     123    123    345    457    4.55
    

    如果您正在读取文件,那么您也可以在 INFILE 语句中使用 RECFM=N 选项,而不是在 INPUT 语句中使用 @@,尽管如果一行实际上有 LF 或 CR/LF最后,您可能还希望将它们包含在分隔符列表中。

    【讨论】:

      【解决方案2】:

      Tom 的回答对于常规文件是正确的,并且您不会遇到行不一致的问题。

      如果您确实需要按照您所说的去做,这是可能的;您将通过预处理步骤将~ 转换为换行符。这是一种方法。

      首先,在数据步骤中,通过 dlm 为~ 的文件;输入字段,直到运行到行尾,对于每个字段,将其输出到临时文件(因此现在该行上只有一个数据行)。

      现在您有了一个可以正常读取的临时文件,其中没有 ~ 字符。

      您可以通过多种其他方式执行此操作,将~ 直接查找/替换为 '0D0A'x 或任何您喜欢的 EOL 字符,例如(如果您有这个,可能更容易/更快地用另一种语言执行在 unix 中,例如可以访问 perl,甚至可以使用 awk/etc。您可能比在 SAS 中更容易做到这一点。

      filename test_in "c:\temp\test_dlm.txt";
      filename test_t temp;
      
      data _null_;
        infile test_in dlm='~';
        file test_t;
        length test_field $32767;
        do _n_= 1 by 1 until (_n_ > countc(_infile_,'~'));
          input
            test_field :$32767. @@;
          putlog test_field;
          put test_field $;
        end;
        stop;
      run;
      
      data want;
        infile test_t dlm=',';
        input v1 v2 v3 v4 v5;
      run;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-02
        • 2016-01-26
        • 1970-01-01
        • 1970-01-01
        • 2018-03-12
        • 2012-11-05
        相关资源
        最近更新 更多