SAS读取TXT文件时DATE_JOINED日期列输出缺失问题求助
问题原因分析
- 多字符分隔符参数使用错误。你当前使用的
dlm='<|>'参数会将<、|、>三个字符各自作为独立分隔符,而不会把<|>整体作为分隔符拆分字段,直接导致字段拆分顺序完全错乱。多字符分隔符需要用dlmstr参数指定。 - INPUT语句读取模式错误。你直接在变量后写
yymmdd10.的写法属于格式化输入,会触发SAS按固定位置读取字段,不会按照分隔符自动拆分字段长度,导致DATE_JOINED读取的内容完全错位,无法匹配日期格式最终生成缺失值。
解决方案
修改后可正常读取的代码如下:
data example_txt; /* 改用dlmstr指定整体多字符分隔符 */ infile '/home/u59667351/example_csv/example_csv.txt' dlmstr='<|>' firstobs=2; /* 用:修饰符,表示按分隔符读取字段后再应用对应输入格式 */ input PERSON_ID $ DEPT_ID $ DATE_JOINED : yymmdd10. ; format DATE_JOINED yymmdd10.; run;
你也可以通过单独指定informat的方式实现同样效果,写法如下:
data example_txt; infile '/home/u59667351/example_csv/example_csv.txt' dlmstr='<|>' firstobs=2; informat DATE_JOINED yymmdd10.; input PERSON_ID $ DEPT_ID $ DATE_JOINED ; format DATE_JOINED yymmdd10.; run;
修改说明:
- 将
dlm替换为dlmstr,确保<|>被识别为一个完整的分隔符做字段拆分 - 通过冒号修饰符/单独informat语句的方式,告知SAS先按照分隔符读取完整的字段内容,再对内容应用
yymmdd10.格式转换,不会强制按固定宽度截取内容。
内容的提问来源于stack exchange,提问作者Barney-LoveStudy
相关产品推荐
相关产品推荐

