在infile语句(SAS)中使用DSD选项时,数据读入错误

时间:2017-10-18 17:41:44

标签: sas

我正在尝试将以下数据从记事本(文本)文件读入SAS数据集:

name1,124325,08/10/2003,1250.03 
name2,114565,08/11/2003,11115.11 
name3,000007,08/11/2003,12500.02 

当我使用此SAS代码时:

data new;
 filename tfile '~\transact2.txt';  
 infile tfile dsd;  
 input name $ id date mmddyy10. cost 8.2;  
run;

我明白这一点,费用都缺失了:

enter image description here

但是,如果我只是将dsd替换为dlm=',',则会正确读取费用变量。为什么dsd会导致成本变量被错误地读取?

1 个答案:

答案 0 :(得分:2)

dsd并未说"使用分隔符"。它告诉SAS 如何使用该分隔符(大多数情况下,将引号中的任何内容视为一个字段,并修改连续分隔符的处理方式)。正确阅读此内容需要dlm=','。我有点惊讶你和你一样接近正确。 (幸运的是,SAS在这里做了一些假设,最终使它正常工作,或多或少)。

此外,您还要混合两种输入方式,这是不允许的。

使用分隔输入时,您使用的是列表,而不是列,输入。您只能指示字符/非字符,不能直接使用信息。如果要像日期那样嵌入信息,则需要使用修改后的列输入:

data new;
 filename tfile '~\transact2.txt';  
 infile tfile dsd;  
 input name $ id date :mmddyy10. cost;  
run;

另请注意,使用cost阅读8.2是不正确的。信息中的小数仅适用于12345678123456.78的读数(在您有80张专栏卡并且不想在小数点上花费一天时)。一般来说,"现代" SAS您不应该使用信息的小数部分。 SAS会看到小数并正确地进行处理。