SAS读取Cars CSV文件时替换Description字段特殊字符代码失效问询
SAS读取CSV代码不生效的原因及修正方案
- 操作对象为空,逻辑顺序错误:
input@仅会将当前数据行读入缓冲区,不会给任何变量赋值,你在还未读取变量的情况下直接对空值Year执行替换操作,没有任何实际效果。同时你原本需要处理的是Description字段的特殊字符,却错误选择了Year作为操作对象,逻辑完全错位。 - 未添加CSV专用读取参数:
infile语句缺少dsd参数,该参数是SAS读取标准CSV的核心参数:它会自动识别被双引号包裹的字段,忽略字段内部的逗号分隔符,同时自动把字段内连续两个双引号转义为1个双引号内容。没有该参数的情况下,Description字段内部的逗号会被识别为字段分隔符,直接打乱整行的字段对应关系。 - 转义符使用不符合SAS语法:
translate函数中写的"是HTML格式的引号实体,SAS原生语法不识别该符号,要匹配双引号直接写'"'即可。 - 输入模式不匹配:直接使用列表输入无法正确读取包含空格、特殊字符的长文本字段,需要先通过
length语句明确各变量的类型和长度,避免字符截断。
修正后可正常运行的代码
FILENAME cars '替换为你的Cars.csv文件的实际路径'; data cars_out; /* 新增dsd参数处理CSV引号逻辑 */ infile cars dlm=',' dsd firstobs=2 truncover; /* 提前定义变量长度,避免截断 */ length Brand $20 Model $20 Description $500 Year 4 Price 8 Sale 1.; input Brand Model Description Year Price Sale; /* 确认需要替换Description中的逗号和双引号再取消注释执行该行 */ * Description = translate(Description, ' ', '",'); run;
内容的提问来源于stack exchange,提问作者tech bitz
相关产品推荐
相关产品推荐

