SAS导入CSV文件出现Invalid data错误、字段读取不全如何解决?
问题原因
错误核心是源CSV的字段内双引号未做转义处理:标准CSV格式要求,字段内容如果本身包含双引号,需要用两个连续双引号""转义,现有数据中"Pipe, 16" inch wide, PVC"里16"的单个双引号会被SAS识别为该字段的结束符,后续内容的逗号会被判定为字段分隔符,直接导致字段错位、price读取失败。
解决方案
方案1:修复源CSV(最稳妥)
把源CSV中字段内的单个双引号替换为两个连续双引号,修复后的数据如下:
color, Description, price "Black, blue, grey", "Pipe, 16"" inch wide, PVC", 20.27
修复后原有的PROC IMPORT代码可以直接正常运行,不需要额外调整。
方案2:不改源文件,用SAS DATA步自定义读取规则
如果不方便修改源CSV,可以放弃PROC IMPORT,手写DATA步自定义分隔符、引号处理规则,代码示例如下:
data want; /* 定义各字段长度和类型,可根据实际数据调整长度上限 */ length color $50 Description $100 price 8; /* 读入文件,指定分隔符为逗号,从第二行开始读数据 */ infile '/home/..data.csv' dsd firstobs=2 lrecl=32767; /* 先暂存读入的行内容 */ input @; /* 批量转义所有非字段边界的单个双引号 */ _infile_ = prxchange('s/(?<!^|,)"(?!,|$)/""/',-1,_infile_); /* 正常读取字段 */ input color Description price; run;
内容的提问来源于stack exchange,提问作者tech bitz
相关产品推荐
相关产品推荐

