【问题标题】:Reading comma delimited file using SAS使用 SAS 读取逗号分隔文件
【发布时间】:2012-08-21 01:52:07
【问题描述】:

要使用 SAS 读取的原始文件有以下记录:

123,"Harold Wilson",Acct,01/15/1989,$78,123

128,“朱莉娅孩子”,食品,1988 年 8 月 29 日,89,123 美元

007,“詹姆斯邦德”,证券,2000 年 2 月 1 日,82,100 美元

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

900,"Earl Davenport",食品,09/09/1989,$45,399

906,"James Swindler",Acct,12/21/1978,$78,200

SAS 代码:

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 离职日期工资

1 123 Harold Wilson Acct 01/15/1989 78 美元

2 128 朱莉娅儿童食品 08/29/1988 89 美元

3 007 詹姆斯邦德证券 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 美元

问题:

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

【问题讨论】:

    标签: sas


    【解决方案1】:

    如果您自己创建了这个 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) 很重要。

    【讨论】:

      【解决方案2】:

      跟进 Bob 上面的出色回答,您也可以这样做:

       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;
      

      【讨论】:

        【解决方案3】:

        我的问题的解决方案是在读取 salary variable 而不是 colon(:) 修饰符时使用 ampersand(&)并且不使用 trunco​​ver

        数据 使用;
            infile 文件 1 dsd;
            输入 ID:3 美元。
                  姓名:20美元。
                  出发:8 美元。
                  约会:mmddyy10。
                  工资和美元 8。
                  ;
            格式化 datehire mmddyy10。
                   工资 8 美元;
        运行;

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-16
          • 1970-01-01
          相关资源
          最近更新 更多