全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
24146 20
2011-04-30
我是SAS新手,正在自学SAS。现在碰到一个问题自己想不明白,请高人指点。
这里有两段SAS程序,唯一的差别是一个冒号(:),但给出的结果不同。我也仔细读过了SAS的帮助功能,但还是不明白。
data meeting;
   input region $ mtg : mmddyy8.;
   sendmail=mtg-45;
   datalines;
N  11-24-99
S  12-28-99
E  12-03-99
W  10-04-99
;
proc print data=meeting;
   format mtg sendmail date10.;
   title 'When To Send Announcements';
run;

结果是
                   Obs    region           mtg      sendmail
                    1       N        24NOV1999     10OCT1999
                    2       S        28DEC1999     13NOV1999
                    3       E        03DEC1999     19OCT1999
                    4       W        04OCT1999     20AUG1999

如果把上述程序中  input region $ mtg : mmddyy8.;的冒号(:)去掉,则得到的结果就是
                   Obs    region          mtg     sendmail
                     1       N       24NOV2009    10OCT2009
                     2       S       28DEC2009    13NOV2009
                     3       E       03DEC2009    19OCT2009
                     4       W       04OCT2009    20AUG2009
这可是相差10年呢。我知道yearcutoff的默认是1920,但不明白 ":" 会有什么影响。
谢谢指点。
二维码

扫码加我 拉你入群

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

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

全部回复
2011-4-30 13:11:09
你的程序我运行了.format中date10.要改成date9.  但去掉(:)和没去掉是一样的,显示的都是正确的时间。
二维码

扫码加我 拉你入群

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

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

2011-4-30 21:45:35
zhu1886 发表于 2011-4-30 13:11
你的程序我运行了.format中date10.要改成date9.  但去掉(:)和没去掉是一样的,显示的都是正确的时间。
可我也試了改format, 有沒有:的結果仍舊不同...  @@
而且這似乎跟format無關
資料讀入的數值, 有無:就已經會造成差異了

但原因我也查不出來 @@   不知道有沒有高手能解釋
二维码

扫码加我 拉你入群

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

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

2011-5-3 10:17:47
一般日期型的变量要是写在第一个位置就不用加冒号,除此之外 要加冒号,意思是,从第一个不是空格的读起。只要前面有空格,最好说明从第一个非空格读起,用冒号。
data meeting;
   input  mtg  mmddyy8. region $;
   sendmail=mtg-45;
   datalines;
11-24-99  N
12-28-99  S
12-03-99  E
10-04-99  W
;
二维码

扫码加我 拉你入群

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

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

2011-5-3 16:51:42
二维码

扫码加我 拉你入群

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

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

2011-5-4 11:05:06
对不起,谢谢ntsean。改一下。
当变量下面的观察值不一样长时,我们会定义变量的长度为大于或等于最长的观察值。当sas读到小于定义的长度的观察值时, 就会继续读下一个变量直到读满定义的长度为止。  冒号在这个code里的作用是为了让sas在读满8个非空字符或者遇到空格时停止。它其实相当于informat 加list input. 以下的两个code效果是一样的。

data meeting;
   input region $ mtg  : mmddyy8.  ;
   sendmail=mtg-45;
   format mtg sendmail date9.;
   put _all_;
   datalines;
N  11/24/99
S  12-28-99
E  12-03-99
W  10-04-99
;
data meeting;
    informat region $3. mtg mmddyy8.;
   input region mtg ;
   sendmail=mtg-45;
   format mtg sendmail date9.;
   put _all_;
   datalines;
N  11/24/99
S  12-28-99
E  12-03-99
W  10-04-99
;
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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