全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3697 4
2015-03-02
data;
input a 3.0 b 3.1 c 4.1 d 4.1;
datalines;
123 123 12.3 1.23
;
run;
proc print;
run;

data;
input a 3.0 @1 b 3.1 @5  c 4.1 @9 d 4.1 @13;
datalines;
123 123 12.3 1.23
;
run;
proc print;
run;

菜鸟想问,为什么第一段代码,读入时c,d是空值啊,但是第二段代码是正确的,求大牛帮忙!!多谢多谢~~~~

二维码

扫码加我 拉你入群

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

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

全部回复
2015-3-3 01:01:43
因为啊,第一段代码中
input a 3.0得到a是第一个值123,
然后要input b 3.1,就去读下一个值,得到123,不符合格式,跳过,去读下一个,得到12.,不符合格式跳过,知道读在最后一个的前三位时,得到1.2才符合format 3.1,这时已经没data可以读了,所以c和d都是missing
注意period前面的是width,包含小数点的
二维码

扫码加我 拉你入群

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

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

2015-3-3 08:05:07
对于第一段代码,应该是这样的:INPUT语句执行的时候:
1. 变量a,informat是3.0,读入前三位是“123”,因此变量的值是123;
2. 变量b,informat是3.1,读入接下来的三位“ 12”,变量的值是1.2;
3. 变量c,informat是4.1,读入后面的4位“3 12”,SAS并不能将这个值用4.1读入,因此将c设为空值;
4. 变量d,informat是4.1,读入接着的4位“.3 1”,SAS同样不能用4.1读这个值,因此d也设为空值。

通过下面的代码可以查看SAS每读一个变量后所在的位置:data;
infile cards column=col;
input a 3.0 @;
put "after a col is:" col;
input b 3.1 @;
put "after b col is:" col;
input c 4.1 @;
put "after c col is:" col;
input d 4.1 @;
put "after d col is:" col;
datalines;
123 123 12.3 1.23
;
run;




另外,如果能在INPUT语句加上:,就能解决这个问题:
data;
input a : 3.0 b : 3.1 c : 4.1 d : 4.1;
put (_all_)(=);
datalines;
123 123 12.3 1.23
;
run;


二维码

扫码加我 拉你入群

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

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

2015-3-4 03:56:05
pobel 发表于 2015-3-3 08:05
对于第一段代码,应该是这样的:INPUT语句执行的时候:
1. 变量a,informat是3.0,读入前三位是“123”,因 ...
你说的是对的,我试了一下datalines只写前两个数字,出来的结果是123,1.2,0.3,. 看来的我的理解有问题啊,以为这时list input,所以从空格读到空格,原来这种指定了格式又没有加:就不是了,那这算是哪种类型的input呢?

另外,第二段代码也有点问题,如果想要读出来的数据和datalines一样的话,那些@要放在变量名前面
二维码

扫码加我 拉你入群

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

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

2015-3-17 14:30:42
seven74 发表于 2015-3-4 03:56
你说的是对的,我试了一下datalines只写前两个数字,出来的结果是123,1.2,0.3,. 看来的我的理解有问题啊, ...
谢谢您帮忙,基础总是那么重要,看来我还要好好学习学习啊!!
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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