全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
14409 5
2013-09-21
菜鸟今天才开始看the little sas book!看到下面这个程序。弄出来和大家分享一下,有什么说的不对的地方,各位大神多多指教!

在SAS中运行如下程序,查看结果。

data test;

infile cards ;

input x @;

input y;

input z @@;

cards;

1 2 3 4 5 6

7 8 9 10 11 12

13 14 15 16 17  

;

run;

proc print;

run;

结果:

Obs x y z
1    1 2 7
2    8 9 13

我自己的体验解释:

一个data步读取数据是多个循环构成的。

一个input语句执行完之后立即换行继续下面的语句;

若在input语句之后加@,则该行以及之后的数据保留到下一个input语句开始读入数据;

若在input语句之后加@@,则该行以及之后的数据保留到下一次data步循环。


可以对比:

data test;

infile cards ;

input x @;

input y;

input z @;

cards;

1 2 3 4 5 6

7 8 9 10 11 12

13 14 15 16 17  

;

run;

proc print;

run;

结果:

Obs x y z
1     1 2 7

以及:

data test;

infile cards ;

input x @;

input y;

input z ;

cards;

1 2 3 4 5 6

7 8 9 10 11 12

13 14 15 16 17  

;

run;

proc print;

run;

结果:
Obs x y z
1     1 2 7


还可以添加 pull _all_ 查看变量的取值过程:


data test;

infile cards ;

put _all_;

input x @;

put _all_;

input y;

put _all_;

input z @;

put _all_;

cards;

1 2 3 4 5 6

7 8 9 10 11 12

13 14 15 16 17   

;

run;

proc print;

run;
二维码

扫码加我 拉你入群

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

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

全部回复
2013-9-22 00:46:30
- good testing for usage of  @ and @@

- but need to add one more data line like "18 19 ..." for avoiding error (var 'z' loss data)
二维码

扫码加我 拉你入群

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

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

2013-9-22 09:17:33
一个data步读取数据是多个循环构成的,读取一条观测记录就是循环一次。
这句不准确,循环一次可以读取多条raw记录,也可以读取多条data set记录,也可以输出多条data set记录。每个set, input都默认从原始数据新一行读取,除非上一个语句中有@或上一步末尾有@@。
二维码

扫码加我 拉你入群

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

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

2013-9-22 10:09:14
ferriswu 发表于 2013-9-22 09:17
一个data步读取数据是多个循环构成的,读取一条观测记录就是循环一次。
这句不准确,循环一次可以读取多条 ...
读取一行记录就是循环一次?
二维码

扫码加我 拉你入群

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

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

2013-9-22 11:05:00
妖帝东皇 发表于 2013-9-22 10:09
读取一行记录就是循环一次?
一次data步循环与读取几条记录(records)或者输出几条记录(observations)没关系。只跟使用input, set这些语句的次数和@符号使用的方法有关。
二维码

扫码加我 拉你入群

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

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

2013-10-8 15:46:52
这个跟打算盘有何区别,只不过是一项技能。判断力更重要。
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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