SAS 冒号格式修饰符
Posted
技术标签:
【中文标题】SAS 冒号格式修饰符【英文标题】:SAS colon format modifier 【发布时间】:2020-04-23 19:51:41 【问题描述】:灰色框中的数字代表什么?什么是理解冒号修饰符如何影响 sas 读取值的方式的简单方法?
【问题讨论】:
灰色框中的数字只是为了帮助您统计字符,它以 5 为单位计数字符,以帮助您在需要时找到长度/位置。 1、5、10、15、20、25、30、35 个字符。 啊,太简单了,谢谢。我把它读成 1,1,2,2,3,3,1,5,0 等等 【参考方案1】:答案取决于未提供的信息。答案 B 是最佳选择,因为在 INPUT 语句中使用信息时应使用冒号修饰符,以防止使用格式化输入模式而不是列表输入模式。否则,格式化的输入可能会读取太多或太少的字符,并且还可能将光标留在错误的位置以读取下一个字段。
但是,如果您尝试从内联卡中读取该数据,则这两行都可以正常工作。那是因为行内数据线被填充到下一个 80 字节的倍数。
如果您将这些行放入一个文件中而行中没有任何尾随空格,则第二行将失败,因为最后一个字段没有 10 个字符可供读取。但是,如果您将 TRUNCOVER 选项(或 PAD)添加到 INFILE 语句,那么它将起作用。
自己试试吧。 TEST1 和 TEST3 工作。 TEST2 收到一张 LOST CARD 便条。
data test1;
input name $ hired date9. age state $ salary comma10.;
format hired date9.;
cards;
Donny 5MAR2008 25 FL $43,123.50
Margaret 20FEB2008 43 NC 65,150
;
options parmcards=test;
filename test temp ;
parmcards;
Donny 5MAR2008 25 FL $43,123.50
Margaret 20FEB2008 43 NC 65,150
;
data test2;
infile test;
input name $ hired date9. age state $ salary comma10.;
format hired date9.;
run;
data test3;
infile test truncover;
input name $ hired date9. age state $ salary comma10.;
format hired date9.;
run;
对于不同的数据,第一次格式化的输入也会引起麻烦。例如,如果日期值仅使用 2 位数字来表示年份,它就会把事情搞砸。因此它尝试将 FL 读取为年龄,然后将薪水的前 8 个字符读取为 STATE,并将空白读取为 SALARY。
data test1;
input name $ hired date9. age state $ salary comma10.;
format hired date9.;
cards;
Donny 5MAR08 25 FL $43,123.50
Margaret 20FEB2008 43 NC 65,150
;
结果:
Obs name hired age state salary
1 Donny 05MAR2008 . $43,123. .
2 Margaret 20FEB2008 43 NC 65150
【讨论】:
谢谢!因此,如果我要使用 infile 导入,我可以使用 truncover 选项而不是使用冒号修饰符?如果我使用卡片功能,因为有填充,是否需要使用冒号修饰符? TRUNOVER 实际上只是处理读取粘贴到行尾的问题。但是行中间的格式化输入也可能导致问题,而这个小例子却没有。如果 HIRED 日期值的年份只有 2 位,则会造成麻烦。有时人们喜欢跳过实际定义其字符变量的长度,并在 INPUT 语句中使用一个信息来给 SAS 一个关于如何定义变量的提示。如果没有冒号,可以直接读取行中值之间的分隔符并使输入不同步。 我想我现在明白了,谢谢!我尝试使用带和不带冒号的信息(在使用卡片的测试数据上)并注意到 SAS 不知道在哪里将观察结果分隔到正确的列中,除非我在变量和信息之间添加了冒号。以上是关于SAS 冒号格式修饰符的主要内容,如果未能解决你的问题,请参考以下文章