sas - 输入文本文件,缺少输出日期格式
问题描述
我是 SAS 新手。我有一个输入 txt 文件并将其上传到我的工作目录,当我读取并格式化 DATE_JOINED 列时,缺少日期,代码如下:
data example_txt;
infile '/home/u59667351/example_csv/example_csv.txt' dlm='<|>' firstobs=2;
input PERSON_ID $ DEPT_ID $ DATE_JOINED yymmdd10. ;
format DATE_JOINED yymmdd10.;
run;
名为 example_csv 的文本文件如下:
PERSON_ID<|>DEPT_ID<|>DATE_JOINED
AAAAA<|>S1<|>2021/01/03
BBBBBB<|>S2<|>2021/02/03
CCCCC<|>S1<|>2021/03/05
缺少 DATE_JOINED 列的 OUTPUT 日期。
有什么建议吗?
谢谢
解决方案
您的数据步骤中有两个错误。
首先是您在使用DLM=
INFILE 选项时看起来像是要使用该DLMSTR=
选项。当您在 DLM= 选项中列出多个字符时,每个单独的字符都被视为分隔符。使用 DLMSTR= 选项,整个序列必须完全按照指定的方式出现,才能被视为分隔符。
其次是您尝试使用 FORMATTED 输入模式读取 DATE_JOINED,这违背了读取分隔数据的目的。由于光标指向<
标记 DEPT_ID 值结束的那个之后,接下来的 10 个字符不代表有效日期。使用 LIST 模式输入,在开始从文件中读取下一个值之前,会跳过任何前导分隔符。
在 INPUT 语句中使用信息规范时,在其前面加上:
修饰符以使用 LIST 输入模式而不是 FORMATTED 模式。
或者删除内联信息并使用 INFORMAT 语句设置在将文本读入该变量时要使用的信息。
您可能还想在 INFILE 语句中添加 TRUNCOVER 选项,这样当最后一个值为空时,INPUT 语句就不会转到下一行来查找值。
data example_txt;
infile '/home/u59667351/example_csv/example_csv.txt'
dlmstr='<|>' firstobs=2 truncover
;
input PERSON_ID $ DEPT_ID $ DATE_JOINED :yymmdd. ;
format DATE_JOINED yymmdd10.;
run;
PS 当使用 LIST 模式输入时,您的信息规范中的宽度将被忽略。不管它包含多少字符,都会使用该行上的整个下一个值。
推荐阅读
- python - 是否有一个 Numpy 函数将数组的索引映射到稀疏向量?
- spring-boot - Spring Boot 抱怨 OptaPlanner
- url - HAProxy 1.5 - 使用地图将路径链接到后端
- javascript - React:使用取决于所选值的字段集呈现表单
- reactjs - 为 React Native 提供 Emacs 的锁文件
- pytorch - 如何使用 conda 安装 torchmeta?
- spring-tools-4 - 使用 Spring 工具的许可 4
- jquery - JQuery - 下拉选择的选项值未传递给 ajax 查询参数(Metronic 模板)
- javascript - 如何使用luxon保持UTC日期的时区偏移?
- c++ - std::optional 如何从初始值设定项列表中构造 std::variant?