【问题标题】:Is there a way to force cleansing the raw data before importing it via a data step, in SAS?在 SAS 中,有没有办法在通过数据步骤导入原始数据之前强制清理原始数据?
【发布时间】:2017-08-14 17:21:17
【问题描述】:

SAS EG

我有一个制表符分隔的文本文件,必须每月导入。所以我通过数据步骤编写了一个导入程序。

data lib.txtimp;
%let _EFIERR_=0;
infile "file/path/tabdlm.txt" lrecl=256
dlm='09'x missover firstobs=2 DSD;
informat <vars>;
format <vars>;
input <vars>;
if _ERROR_ then call symput('_EFIERR_',1);
run;

我最近遇到的一个问题是,有时某些数据线错误地有两个选项卡。文本文件很大,大约 500MB。所以我试图通过编写上面的代码来自动化这个过程,但它没有考虑到这个问题。它在那个地方写了一个空白。 当我使用内置的“导入数据”时,它首先清理原始文件,然后运行其中间数据步骤以提供所需的输出。这不会在该列中给我一个空白。它会忽略额外的选项卡。

我的文本文件的问题示例。

col1   col2   col3
1   a   b
2   foo   bar
3      wayout   data
4   another      example

sample file

有没有一种方法可以通过我的数据步骤导入来自动化清理过程?或者,你们知道我应该添加什么步骤来获得这种东西吗?

【问题讨论】:

  • “内置”导入数据是什么意思?我怀疑任何事情都是首先“清理”数据,它可能只是使用了不同的选项。
  • 不,他们有。文件 -> 导入数据。如果您仔细查看状态/作业栏,它会清楚地说明步骤。它清理,然后运行中间数据步骤。
  • 您指的是SAS Studio、DI、EG还是其他?该帖子未指明您正在使用的 SAS 产品。
  • 抱歉!我正在使用 SAS EG。
  • 删除 DSD 对你不起作用吗?

标签: sas datastep csv


【解决方案1】:

删除 DSD 选项。 DSD 选项告诉 SAS 将两个连续的分隔符视为缺失,而标准方法会将两个连续的分隔符视为一个分隔符。

http://support.sas.com/documentation/cdl/en/lestmtsref/69738/HTML/default/viewer.htm#n1rill4udj0tfun1fvce3j401plo.htm

我无法复制您的问题。此代码适用于我在 SAS 9.4 TS1M3 上。

data txtimp;
infile "C:\_LOCALdata\temp\sample_tab_dlm_file.txt"  missover lrecl=256
dlm='09'x  firstobs=2 ;
input col1 $ col2 $ col3 $;
run;

【讨论】:

  • 在我的情况下找到了一种解决方法。将字节限制为 256 是一个问题。我将其概括为 32767。lrecl=32767
  • 这已经在您的代码中显示了。如果您发布的代码与您正在运行的代码不匹配...
  • 我将lrecl=256 更改为lrecl=32767。现在可以了。以前是 256 字节。
猜你喜欢
  • 1970-01-01
  • 2022-01-15
  • 2022-01-20
  • 1970-01-01
  • 2015-12-16
  • 1970-01-01
  • 1970-01-01
  • 2013-09-27
  • 1970-01-01
相关资源
最近更新 更多