首页 > 解决方案 > 以两行结束并从不同位置开始读取 SAS

问题描述

我有两行观察要在 SAS 中阅读。它是一个逗号分隔的数据集。我的代码如下:

DATA SASweek1.industry;
  INFILE "&Dirdata.Assignment1_Q6_data.txt" DLM="," DSD termstr=crlf TRUNCOVER;
  LENGTH Company $ 15;
  INPUT Company $ State $ Expense COMMA9. ;  
  FORMAT Expense DOLLAR9.;
  *INFORMAT Expense DOLLAR10.;
RUN; * not ready;

原始数据集如下所示:

在此处输入图像描述

我可以很好地打印出第一行观察结果,但是最后一个“0”会到第二行的第一个位置,变成“0Lee's..”。任何建议将不胜感激!!

标签: sas

解决方案


它只是在做你告诉它做的事情。您告诉它准确读取 9 个字符。

通常,您不应使用带分隔数据的格式化输入模式。:您可以通过在语句中的信息规范前面添加(冒号)前缀INPUT或完全删除信息规范并使用INFORMAT语句让 SAS 知道要使用的信息来防止这种情况。

但是您的数据未正确分隔,因为最后一个字段包含分隔符,但该值未包含在引号中。所以逗号使它看起来像两个值而不是一个。真正的解决方案是修复创建文件的进程以创建有效的分隔文件。它需要用逗号引用其中的值,或者从数字中删除逗号,或者使用数据中没有出现的分隔符。

幸运的是,因为它是该行的最后一个字段,您可以使用格式化输入来读取该字段。由于您使用的是该TRUNCOVER选项,因此只需将 INPUT 语句中的信息宽度设置为最大值。

DATA SASweek1.industry;
  INFILE "&Dirdata.Assignment1_Q6_data.txt" DLM="," DSD termstr=crlf TRUNCOVER;
  LENGTH Company $15 State $15 Expense 8;
  INPUT Company State Expense COMMA32. ;  
  FORMAT Expense DOLLAR9.;
RUN;

推荐阅读