全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
4788 4
2016-12-03
悬赏 30 个论坛币 已解决
程序很简单!

数据源就两个:
复制代码
程序如下:
复制代码
如果不注释掉format语句, 那么这两段程序的结果是一模一样的.

注释掉之后, 很神奇的是, time返回的数值居然不一样.

这是为什么呢?

加不加冒号又有什么区别呢?

有一道sas选择题, 说必须加冒号," colon is required to associate the informat with the variable."但是好像并没有区别啊!??

最佳答案

mich_ard 查看完整内容

楼上的回答是对的。冒号是一种输入格式修饰符(其他修饰符还包括,&,~,#,@等)。没有冒号时,b 是formatted column input,按格式(mmddyy8.) 输入的是“ [/backcolor]12-25-8” (注意,最前面 [/backcolor]代表1空格)。加冒号使其成为 list input,数据不再是严格的w的宽度,而是类似于分隔符分隔(无论多少空格都被当成了一个空格),输入结果将是 “12-25-87” 。当你有多个数据,而且数据前的空格数多少不一时,这个方法特 ...
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2016-12-3 17:32:49
楼上的回答是对的。冒号是一种输入格式修饰符(其他修饰符还包括,&,~,#,@等)。没有冒号时,b 是formatted column input,按格式(mmddyy8.) 输入的是“ 12-25-8” (注意,最前面 代表1空格)。加冒号使其成为 list input,数据不再是严格的w的宽度,而是类似于分隔符分隔(无论多少空格都被当成了一个空格),输入结果将是 “12-25-87” 。当你有多个数据,而且数据前的空格数多少不一时,这个方法特别有用。

举一例:在所有3个observation中,DOB 和 salary前的空格数都不一样。

data example;
input Subj $3.  Name & $20.  DOB : mmddyy10.  Salary : dollar8.;
format DOB date9. Salary dollar8.;
cards;
001 Christopher Mullens  11/12/1955 $45,200        /*DOB 和 salary前的空格数分别是2,1*/
002 Michelle Kwo         9/12/1955  $78,123           /*DOB 和 salary前的空格数分别是9,2*/
003 Roger W. McDonald    1/1/1960   $107,200     /*DOB 和 salary前的空格数分别是4,3*/  

run;

(注,& 是另一个修饰符,以后我将另文介绍。意思是遇到连续2个空格即停止,不需要严格执行此处的宽度20)

55555.jpg


此外,冒号还有很多其他用法,简单介绍一下:

1,表示遇到单个空格就停止(不需要严格执行宽度,即使只有短至3个字符,如下例,也要停止,) --> (比较上面提到的 & ,遇到连续2个空格即停止)。

data test1;
input univ :$12. ranking country $;
cards;
BeijingU 1 China
MIT 2 USA
UCalifornia 3 USA

88888.jpg

2,表示“以 ... 开始” (begin with)。常和各种比较操作符(如=,>, >= 等)结合使用。如 :

data test2;
input id name $;
if name = :'B' then delete;    /*删除以B打头的名字*/
cards;
01 Bevan
02 Posley
03 Owen
04 Burden
;

77777.jpg

(如果 if 句改为, if name > :'B' then delete;  结果将是 1 Bevan 和 4 Burden )。

3,wildcard。如:

Total = sum (of a:); 计算所有a开头的变量之和。


好像还有一些其他较复杂的用法,实在想不起来了。以后再补充吧。





附件列表
55555.jpg

原图尺寸 16.69 KB

55555.jpg

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-12-3 20:24:41
区别在于
不加冒号(:)是formatted input,按informat的w读取指定列数的内容作为数据
加冒号(:)是modified list input,数据是以分隔符分隔的
你可以在源数据的b后面再加一个空格试试,这样的区别会更明显,有助于理解
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-12-3 22:00:19
:修饰提示符
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-12-4 09:34:45
才发现,google chrome会改变格式,firefox和IE 不会。举我上面的帖子为例,google chrome将两行(001和002)变成了一行,而且中间一些空格也不见了:

001 Christopher Mullens  11/12/1955 45,200002MichelleKwo 9/12/195578,123

不知大家发现没有?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群