使用SAS INFILE语句读取CSV文件无观测值问题咨询
解决SAS INFILE读取CSV时0观测的问题
我来帮你排查这个头疼的问题——你得到0 observations and 1 variables的结果,说明SAS根本没从你的CSV文件里读到任何数据行,咱们一步步来定位解决:
1. 先确认文件路径绝对正确
这是最常见的坑!你得先保证"E:/Documents/Week 2/np_traffic.csv"这个路径完全匹配实际文件的位置:
- 检查文件夹名称有没有拼写错误(比如
Week 2是不是写成了Week2?有没有空格漏写?) - 可以用SAS自带的函数快速验证路径有效性,运行这段代码:
如果日志里输出FILENAME test "E:/Documents/Week 2/np_traffic.csv"; %PUT %SYSFUNC(FILEEXIST(&test.));1,说明路径没问题;输出0就赶紧修正路径。
2. 检查firstobs=2是否合理
你设置了firstobs=2,意味着SAS会跳过第一行直接从第二行开始读。但如果你的CSV文件第一行就是数据(没有表头),那这一步直接把所有数据都跳过了,自然0观测。
- 打开你的
np_traffic.csv文件看看第一行是不是表头:- 如果没有表头,直接删掉
firstobs=2再运行; - 如果有表头,那继续往下排查。
- 如果没有表头,直接删掉
3. 调整INFILE的参数适配文件格式
有时候CSV的分隔符、行尾格式会导致SAS读不到数据,试试这几个调整:
- 如果分隔符不是逗号:比如你的文件是制表符分隔,要加上
delimiter参数,比如:INFILE "E:/Documents/Week 2/np_traffic.csv" dsd firstobs=2 delimiter='09'x; - 加上
missover或truncover:防止SAS因为行尾没有分隔符就跳过整行,修改后的INFILE语句:INFILE "E:/Documents/Week 2/np_traffic.csv" dsd firstobs=2 missover;
4. 做个最小测试排除变量问题
先简化代码,去掉firstobs=2,只读取第一行看看能不能拿到数据:
DATA traffic2; INFILE "E:/Documents/Week 2/np_traffic.csv" dsd; INPUT ReportingDate $; RUN;
- 如果这时候能读到观测,说明
firstobs=2的设置错误; - 如果还是0观测,那大概率是文件本身损坏,或者路径依然有问题。
内容的提问来源于stack exchange,提问作者Ada Li
相关产品推荐
相关产品推荐

