【问题标题】:parsing a text file in sas在 sas 中解析文本文件
【发布时间】:2012-07-19 19:37:28
【问题描述】:

所以我有一个相当混乱的文本文件,我正试图将其转换为 sas 数据集。它看起来像这样(虽然更大):

0305679  SMITH, JOHN  ARCH05  001  2
ARCH05  005  3
ARCH05  001  7

我正在尝试设置 5 个单独的变量(ID、姓名、工作、时间、小时数),但显然只有 3 个变量出现在第一行之后。我试过这个:

infile "C:\Users\Desktop\jobs.txt" dlm = '  ' dsd missover;
input ID $ name $ job $ time hours;

并没有得到正确的输出,然后我尝试解析它

infile "C:\Users\Desktop\jobs.txt" dlm = ' ' dsd missover;输入 所有数据$; id = substr(allData, find(allData,"305")-2, 7);

但我仍然没有得到正确的输出。有任何想法吗?

编辑:我现在正在尝试使用 .scan() 和 .substr() 来分离更大的数据集,我如何从数据中子集单行?

【问题讨论】:

    标签: database sas


    【解决方案1】:

    您的数据可能不会那么混乱;它可能只是分层格式,其中第一行包含所有五个变量,后续行包含变量 3-5 的值。换言之,ID 和 NAME 应该在您阅读文件时保留。

    如果这是正确的(这是一个分层布局),这是一个可能的解决方案:

    data have;
       retain ID NAME;
       informat ID 7. JOB $6. TIME 3. HOURS 1.;
       input @1 test_string $7. @;
       if notdigit(test_string) = 0
          then input @1 ID NAME $12. JOB time hours;
          else input @1 JOB time hours;
       drop test_string;
       datalines;
    0305679  SMITH, JOHN  ARCH05  001  2 
    ARCH05  005  3 
    ARCH05  001  7 
    0305680  JONES, MARY  ARCH06  002  4 
    ARCH06  005  3 
    ARCH07  001  7 
    run;
    

    关键是要真正了解原始文件的组织方式。了解规则后,使用 SAS 读取它是轻而易举的事!

    【讨论】:

      【解决方案2】:
       A list input solution could be the following:
      
      
      
      data have;
      array all(6) $20. ID LNAME FNAME JOB TIME HOURS;
       retain Id Lname Fname;
       drop i;
       input @; 
        nitems = countw(_infile_,', ');  
          if notdigit(scan(_infile_,1)) = 0 then 
           do i = 1 to nitems;
             all(i) = Scan(_infile_,i);
           end;
          else 
           do i = 1 to 3;
          all(i+3) = Scan(_infile_,i);
            if i = 6 then all(i) = all(i)*1;
        end;
      datalines;
      0305679  SMITH, JOHN  ARCH05  001  2 
      ARCH05  005  3 
      ARCH05  001  7 
      0305680  JONES, MARY  ARCH06  002  4 
      ARCH06  005  3 
      ARCH07  001  7 
      run;
      
      proc print; run;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-12
        • 2016-06-24
        • 2014-05-28
        • 2012-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多