date - SAS INPUT 语句中信息前面的冒号
问题描述
我想知道为什么,如果 SAS 通过数据步骤中的 INPUT 语句仅读取日期变量,似乎有必要在每个信息名称之前写一个冒号,而如果变量列表以另一种类型开头变量(例如字符变量),信息前面不需要冒号。为了说明我的问题,两个小程序(见下文)。第一个为日期生成无效数据(只要我在 mmddyy10. 之前不写冒号,以获取 INPUT date :mmddyy10.;),而第二个没有。奇怪,不是吗?对此可能有一些解释,但尽管搜索了 SAS 支持文档和论坛,但我无法发现它可能是什么。欢迎任何帮助!无论如何,如果我能早点明白什么是利害攸关的,我就可以节省几个小时来尝试解决这个问题。
* program #1;
DATA _NULL_;
INPUT date mmddyy10.;
DATALINES;
09/14/2012
09/15/2012
;
RUN;
PROC PRINT; RUN;
* program #2;
DATA _NULL_;
INPUT id $ date mmddyy10.;
DATALINES;
A 09/14/2012
B 09/15/2012
;
RUN;
解决方案
在您的第一个程序中,您告诉 SAS 读取前 10 个字符作为日期。但是前 4 个字符都是空格。因此,您要求它尝试转换' 09/14/'
为日期。我建议始终从第一列开始键入 DATALINES(又名 CARDS)语句,以防止编辑器的自动缩进功能导致数据行也被缩进。
:
内联格式规范前面的冒号 ( ) 告诉 SAS 使用列表模式输入而不是格式化输入。使用格式化输入 SAS 读取格式指定的字符数。在列表模式下,SAS 根据当前分隔符和 dsd 设置读取行中的下一个字段。调整用于信息的宽度以匹配行中下一个字段的实际宽度。
例子:
data test;
length name1-name3 $30 ;
input @1 name1
@1 name2 $5.
@1 name3 :$5.
;
cards;
Elizabeth
;
结果:
Obs name1 name2 name3
1 Elizabeth Eliza Elizabeth
推荐阅读
- javascript - Asset.loadAsync(moduleId) 在发布模式下在 Android 上抛出 `Error: resource id #0x0`
- c# - 使用 EF 6 和 C# 从相关表中检索数据
- react-native - 使用 gitlab 自动构建 React Native 应用程序
- javascript - 统计 MERN,react,nodejs
- sql - JPA 子查询失败
- r - 从列中识别和删除字符
- c++ - sfinae 检测容器:std:array 失败
- node.js - Fiddler 未捕获在 Node.js 中发送的 Websocket 请求
- visual-studio-code - 自动导入 Visual Studio 代码在 jsx 中不起作用
- javascript - 从(while)循环javascript返回多个值