【问题标题】:Import text file into SAS将文本文件导入 SAS
【发布时间】:2021-07-02 03:19:04
【问题描述】:

我正在使用以下代码将文本文件导入 SAS:

proc import datafile="C:\Users\Desktop\data.txt" out=Indivs dbms=dlm replace;
 delimiter=';';
   getnames=yes;
run;

但是,我在日志中收到错误消息,并且某些字段填充了“。”代替真实数据,我不知道是什么问题。

错误信息是:

Invalid data for DIPL in line 26 75-76.
Invalid data for DIPL in line 28 75-76.
Invalid data for DIPL in line 31 75-76.
Invalid data for DIPL in line 34 75-76.

这里有一个数据样本http://m.uploadedit.com/b029/1392916373370.txt

【问题讨论】:

  • 你能发布你的日志吗?此外,您的 datafile= 选项中有一个叛徒撇号..
  • 好的,看来是 DIPL 变量导致了问题,因此被“.”s 填充。 SAS 将其读取为 best12.,实际上是 2 美元。变量 - 这是问题的原因吗?
  • 很有可能。 Joe 是正确的——在这里使用 infile 语句是一种更好的方法。您可以从日志中提取代码(由 proc 导入生成)并根据您的需要进行调整。如果在选择时按住 ALT 键,则可以避免行号..
  • 您现在发布的数据文件中没有分号,因此我将代码中的分隔符更改为空格,SAS 读取文本文件对我来说很好。我还尝试在数据中用分号替换空格并使用您的原始代码 - 这也很好 - DIPL 被识别为一个字符。你还有问题吗?
  • 好的,我之前更新的数据样本是在 R 中处理的 - 所以我认为它应该将变量更改为字符,这就是它工作正常的原因。然而,当使用 infile 语句并将 DIPL 更改为 $2 时,原始数据集 (telechargement.insee.fr/fichiersdetail/RP2010/txt/…)。只是将错误转移到其他地方......我得到其他字段填充“。”s。

标签: sas


【解决方案1】:

在大多数情况下不要将PROC IMPORT 用于分隔文件;您应该使用数据步骤输入。您可以使用PROC IMPORT 生成初始代码(到您的日志),但大多数时候您至少需要进行一些更改。这听起来像是其中之一。

data want;
infile "blah.dat" dlm=';' dsd lrecl=32767 missover;
informat
trans $1.
triris $1.
typc $6.
;
input
trans $
triris $
typc $
... rest of variables ...
;
run;

PROC IMPORT 在您的日志中生成类似这样的代码,因此您可以将其作为起点,然后更正错误的内容(数字而不是字符,如果变量太少,则添加变量,如上所示等)。

【讨论】:

    【解决方案2】:

    我从您的链接中复制了文本文件,并运行了您的代码(不带撇号):

    proc import datafile="C:\temp\test.txt" out=Indivs dbms=dlm replace;
     delimiter=';';
       getnames=yes;
    run;
    

    尽管有以下情况,但它运行良好:

    Number of names found is less than number of variables found.
    

    结果:

    NOTE: WORK.INDIVS data set was successfully created.
    NOTE: The data set WORK.INDIVS has 50 observations and 89 variables.
    NOTE: PROCEDURE IMPORT used (Total process time):
          real time           0.30 seconds
          cpu time            0.26 seconds
    

    【讨论】:

    • 事实上 - 我用撇号再次运行它,它也运行良好。你的错误信息是什么?
    【解决方案3】:

    如果日志显示“找到的名称数小于找到的变量数”。 然后它创建具有空白值的新变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-22
      • 2016-01-13
      • 1970-01-01
      相关资源
      最近更新 更多