使用SAS读取逗号分隔文件

时间:2012-08-19 09:26:04

标签: sas

使用SAS读取的原始文件包含以下记录:

123,“Harold Wilson”,Acct,01/15/1989,$ 78,123

128,“Julia Child”,Food,08/29/1988,$ 89,123

007,“詹姆斯邦德”,安全,02/01/2000,$ 82,100

828,“Roger Doger”,Acct,08/15/1999,$ 39,100

900,“Earl Davenport”,Food,09/09/1989,$ 45,399

906年,“James Swindler”,Acct,12/21/1978,$ 78,200

SAS CODE:

options nocenter;

filename file1 'D:\files\SAS\raw-files\employee.csv';

data Employ;
infile file1 dsd;
input id       :       $3.
      name     :      $20.
      depart   :       $8.
      datehire : mmddyy10.  
      salary   :  dollar8.  
      ;
format datehire mmddyy10.
       salary    dollar8.;
run;

title 'Employee details';

proc print data=Employ;
run;

输出

员工详细信息

Obs id name离开datehire薪水

1 123 Harold Wilson Acct 01/15/1989 $ 78

2 128 Julia Child Food 08/29/1988 $ 89

3 007 James Bond Security 02/01/2000 $ 82

4 828 Roger Doger Acct 08/15/1999 $ 39

5 900 Earl Davenport Food 09/09/1989 $ 45

6 906 James Swindler Acct 12/21/1978 $ 78

问题:

如何在忽略逗号后以与原始文件相同的格式获取薪水作为工资部分。

3 个答案:

答案 0 :(得分:2)

如果您自己创建了此CSV文件,则应重新创建该文件。 SAS将数据值中的逗号视为字段分隔符(与任何其他应用程序一样)。

如果无法重新创建文件,可以将两列作为不同的文本变量读取,用逗号连接它们,并使用INPUT函数“读取”结果:

data Employ;
   infile file1 dsd truncover;
   input id       :       $3.
         name     :      $20.
         depart   :       $8.
         datehire : mmddyy10.
         salary_a :       $8.
         salary_b :       $8.
         ;
   salary = input( catx(',',salary_a,salary_b),dollar8.);
   drop salary_a salary_b;

   format datehire mmddyy10.
          salary    dollar8.;
run;

请注意,truncover语句中添加了infile选项。这对于允许SAS正确处理最后一个变量(salary_b)非常重要。

答案 1 :(得分:2)

继续鲍勃上面的优秀答案你也可以这样做:

 data test;
  infile cards dsd truncover;
  input id name & : $20. depart : $12. datehire anydtdte10. salary comma8.;
  format id z3. datehire mmddyy10. salary dollar8.;
  cards;
  123,"Harold Wilson",Acct,01/15/1989,$78,123
  128,"Julia Child",Food,08/29/1988,$89,123
  007,"James Bond",Security,02/01/2000,$82,100
  828,"Roger Doger",Acct,08/15/1999,$39,100
  900,"Earl Davenport",Food,09/09/1989,$45,399
  906,"James Swindler",Acct,12/21/1978,$78,200
  ;
  run;

  proc print;
  run;

答案 2 :(得分:2)

我解决了我的问题,即在读取工资变量而不是冒号(:)修饰符&符号(&) >而不使用 trunco​​ver

data Employ;
    infile file1 dsd;
    input id       :       $3.
          name     :      $20.
          depart   :       $8.
          datehire : mmddyy10.  
          salary   &  dollar8.  
          ;
    format datehire mmddyy10.
           salary    dollar8.;
run;

&符号(&)将继续读取工资变量,直到遇到两个逗号分隔符。因此,可以正确读取文件。

相关问题