【问题标题】:How does SAS identifies the End of Observation while reading data from csv?从 csv 读取数据时,SAS 如何识别观察结束?
【发布时间】:2017-07-09 13:04:49
【问题描述】:

我的 csv 文件 sales.csv 有 8 个变量

Employee_ID、First_Name、Last_Name、Gender、Salary、Job_Title、country 和 Emp_Hire_Date

我的代码是这样的:

%let path = /folders/myfolders/ecprg193;
data work.sales1;
   infile "&path/sales.csv" dlm=',';  
   input Employee_ID First_Name $
         Last_Name $ Gender $ Salary
         Job_Title $ Country $;
run;

基本上是从 csv 文件创建数据集 sales1。

在代码中你可以看到我已经指定了国家变量。 我的问题是在创建数据集 work.sales1 时 sas 如何跳过 CSV 中的雇佣数据

如果需要更多信息来回答这个问题,请告诉我。

【问题讨论】:

  • 您能展示几行数据文件的示例吗?此外,当您运行程序时,SAS 是否生成任何错误消息?
  • SAS 没有给出任何错误消息,我检查了日志。从输入文件 sales.csv 复制的前 2 行文本..... 120102,Tom,Zhou,M,108255,Sales Manager,AU,11AUG1973 120103,Wilson,Dawes,M,87975,Sales Manager,AU,22JAN1953 .....

标签: csv sas


【解决方案1】:

根据您的描述,您的文件每行有 8 个字段,而您的程序每行仅读取 7 个变量。因此它会跳过最后一个字段,因为您从未阅读过它。

默认情况下,SAS 将期望由操作系统的正常行尾字符分隔的可变长度记录。从您的路径看来,您正在 Unix 上运行 SAS,因此默认的行尾将只是换行符 ('0A'x)。如果您在 PC 上创建文件,那么它很可能实际上是使用回车和换行两个字节序列 ('0D0A'x) 作为行尾创建的。您可以通过将TERMSTR= 选项添加到INFILE 语句来告诉SAS 使用哪一个。因此,如果您在 Unix 上读取 PC/Windows 文件,请添加 termstr=CRLF

【讨论】:

  • yes line feed char 根据您的观察,是每一行的分隔符。事实上,你的回答是准确而准确的谢谢:)
  • 如果您可以看到 infile 语句,我只为每个变量的值指定了分隔符 (,),而不是为行尾/观察指定了分隔符。因此默认情况下 ('0A'x) 是观察分隔符。如果我想明确指定观察分隔符怎么办,你能告诉我更多关于这个,如何添加一个?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-16
  • 2013-07-12
  • 2013-04-28
  • 2015-05-29
  • 1970-01-01
  • 1970-01-01
  • 2022-06-17
相关资源
最近更新 更多