第3行1-8行的工资数据无效

时间:2016-10-16 03:00:09

标签: sas

我在文本文件中有原始数据。

Hire Date empid Job Code Salary
17FEB1980 E00271 RESCLK $28,000
23FEB1980 E00166 MKTCLK $34,000
31MAR1980 E00151 MECH01 $41,000
28MAY1980 E00074 MECH03 $36,000
31MAY1980 E00222 PRES $250,000
05JUN1980 E00234 FINCLK $41,000
10JUL1980 E00350 FLTAT2 $19,000

我尝试通过代码创建数据集。

data Test.mydataset;
infile rawdata  FirstObs=2;
Input Hire_data date9. empid$ Job_code $  Salary dollar8.;
run;

但是我收到了一堆错误。

  

第3行1-8中的工资数据无效   等

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您已使用printBig作为信息,但输入的Feed长度可变,请使用colon operator 告诉SAS使用提供的信息,但在遇到分隔符时停止读取此变量的值。不要忘记冒号,因为没有它们,SAS可能会读取分隔符以满足信息中指定的宽度,这会导致问题。

解决方案:

dollar8.

答案 1 :(得分:0)

最简单的更改是将TRUNCOVER选项添加到INFILE语句,以防止SAS在当前行没有足够字符时转到新行。你告诉它读取8个字符,但大多数SALARY值只有7个字符。

最佳方法是使用ATTRIBLENGTH语句定义变量,而不是让SAS猜测如何根据您在代码中首次引用它们来定义变量。您可以将信息设置为与INFORMATATTRIB语句一起使用。

data mytest ;
  infile cards truncover firstobs=2;
  length Hire_Date 8 Empid $10 Job_Code $10 Salary 8;
  informat Hire_Date date. Salary comma. ;
  format Hire_Date date9. Salary dollar8. ;
  input Hire_Date -- Salary ;
cards;
Hire Date empid Job Code Salary
17FEB1980 E00271 RESCLK $28,000
23FEB1980 E00166 MKTCLK $34,000
31MAR1980 E00151 MECH01 $41,000
28MAY1980 E00074 MECH03 $36,000
31MAY1980 E00222 PRES $250,000
05JUN1980 E00234 FINCLK $41,000
10JUL1980 E00350 FLTAT2 $19,000
;;;;