【发布时间】:2020-04-23 19:51:41
【问题描述】:
【问题讨论】:
-
灰色框中的数字只是为了帮助您统计字符,它以 5 为单位计数字符,以帮助您在需要时找到长度/位置。 1、5、10、15、20、25、30、35 个字符。
-
啊,太简单了,谢谢。我把它读成 1,1,2,2,3,3,1,5,0 等等
标签: sas formatting modifier
【问题讨论】:
标签: sas formatting modifier
答案取决于未提供的信息。答案 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
【讨论】: