【问题标题】:SAS Invalid data for csvSAS CSV 数据无效
【发布时间】:2021-09-22 11:48:21
【问题描述】:

我对 SAS 很陌生,经过多次尝试,我仍然想知道如何将我的 csv 文件准确地导入 SAS。

这是我的数据

color, Description, price
"Black, blue, grey", "Pipe, 16" inch wide, PVC", 20.27

这是我的 sas 代码

PROC IMPORT datafile='/home/..data.csv'
            out=data dbms=csv replace; 
            getnames=yes;
            guessingrows = max;
RUN; 

SAS 的内容如下:

Color                 Description      Price 
Black, blue, grey     "Pipe             .

我怀疑 SAS 处理“描述中的管道而不是管道,16 英寸宽,PVC。我该怎么做才能让 SAS 读取整行?

【问题讨论】:

  • 我尝试使用 DATA ...;格式 ..;跑;同样,但它没有设法生成输出,因为它说价格的数据类型无效,我猜它与上面的问题相同。我很感激任何指导。谢谢
  • 在communities.sas.com 上发帖以更快地回答这个问题。
  • 你有一个不匹配的引号。 “管道,16 英寸宽,PVC”无法按预期解析。将为 16" inch widePVC" 创建新列。如果您在 Excel 中打开它,您也会看到它是如何添加新列的。您可以暴力破解-force 通过添加额外的临时列并制定一堆规则来解决这些问题,但最好的解决方案是获取另一种分隔格式的文件,例如制表符或管道。
  • 文件是谁创建的?你能让他们创建一个可以解析的版本吗?
  • 谢谢。 @tom 它实际上是发送给我的数据集,我必须与他们核实

标签: sas


【解决方案1】:

csv 数据无效。

“期望的”双引号值 Pipe, 16" inch wide, PVC 包含双引号 (") 和值分隔符 (,)。如果16"" 转义为16"",则某些CSV 阅读器将正确解析。但是,SAS IMPORT 似乎不是其中之一。

您能否使用|~ 等备用字段分隔符获取数据?

【讨论】:

  • 只是好奇是否“FOMAT color$:17.description$:25.price$:5.;”会有帮助吗?
  • 对于任意数据值,您可能会请求固定字段布局中的数据,因此您可以准确地知道哪些列属于哪个变量。如果您可以获取字段之间有两个空格的数据并且没有字段包含两个空格,则列表输入的& 功能可能会起作用。阅读INPUT Statement, List的文档
  • 谢谢理查德。只是好奇是否有办法单独在 SAS 中解决它?使用数据步骤并将 " 替换为 * 等其他值然后再次读取 sas 文件是否可行?
  • 没有。相反,您的代码必须使用额外的逻辑来处理该行,例如从行前输入颜色,然后从行尾向后计算价格,并假定描述是剩下的内容。如果数据提供者不能正确界定值,你必须接受好的逻辑将被坏数据颠覆。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-22
  • 1970-01-01
相关资源
最近更新 更多