SAS加载列间含大量空格的BLS文本文件报错,如何修复?
修复BLS固定宽度文本文件的SAS读取错误
你的问题出在两个核心点:
- 错误混用
dsd选项与列指针定位:dsd是针对分隔符(如逗号)分隔的文件设计的,会自动识别并跳过分隔符,但你的BLS文件属于固定宽度格式,每列位置固定,dsd会干扰列指针的定位逻辑,导致读取位置偏移,进而引发year、value等列的数据错误。 - 列指针位置与实际文件不符:BLS的la.data系列文件标准列位置并非你代码中写的
@32、@36这类数值,比如year字段通常从第21位开始,而非第32位。
修正后的SAS代码
data unemployment; infile 'P:\Projects\la.data.2.AllStatesU.txt' firstobs=2 truncover; input @1 series_id : $20. @21 year @25 period : $3. @28 value @39 footnote_codes : $1.; run;
额外验证步骤
- 用文本编辑器(如Notepad++)打开原始文件,查看第2行的实际列位置(编辑器状态栏会显示光标所在列数),确认year、period等字段的起始位置是否与代码一致,如有偏差再调整
@后面的数字。 - 运行
proc print data=unemployment(obs=5);查看前5行数据,确认各列读取是否正确。
内容的提问来源于stack exchange,提问作者bandcar
相关产品推荐
相关产品推荐

