全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
908 0
2020-03-10
打算今年考SAS的证书, 一点学习心得和大家分享

题目:
Giventhefollowing raw data records inTEXTFILE.TXT:

—-|—-10—|—-20—|—-30
John,FEB,13,25,14,27,Final
John,MAR,26,17,29,11,23,Current
Tina,FEB,15,18,12,13,Final
Tina,MAR,29,14,19,27,20,Current

The following output is desired:

Obs NameMonth Status Week1 Week2 Week3 Week4 Week5

1 John FEB Final $13 $25 $14 $27 .
2 John MAR Current $26 $17 $29 $11 $23
3 Tina FEB Final $15 $18 $12 $13 .
4 Tina MAR Current $29 $14 $19 $27 $20



1. DSD=和DLM=都是infile的option. DSD默认`,`为分隔符. 如果数据不是以`,`为分隔, 可以在DLM=里指明. eg. DLM=';'.如果是tab, code为DLM='09'X. 如果是使用字符串分隔, 则用DLMSTR=.
2. 原题中status是最后一个变量, 但要求输出的时候是第三个变量. 自己测试了一次下, 是'lengthName $ 4 Month $ 3 Status $ 7;' 这一句改变了最后变量的输出顺序. 字符型变量都可以通过这个方法改变顺序. 对数字型没用.
3. '@','@@'都有使指针停在当前数据行的作用.

     '@' 在SAS返回data step以后会释放当前数据行. 多用在读入部分数据.eg:

     ```SAS
     INPUT Type $ @;
     IF Type = 'surface' THEN DELETE;
     INPUT Name $ 9-38 AMTraffic PMTraffic;```

     读入一行数据的第一个变量Type, 遇到@, 保留在当前数据行, 运行接下来的IF, 如果刚才读到的type是'surface', 删除目前的观察值, 如果不是,继续运行下一个input语句, 继续读当前数据行接下来的数据. SAS 返回data step. 开始处理下一条数据行.
     `@@`在SAS返回data step以后不会释放当前数据行, 直到遇到下一个不带`@@`的input语句.
     ```SAS
     data abc;
     infile cards;
     input x y z@@;
     cards;
     1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 .
     ;
     run;```

     SAS把整行数据读完才结束. 这里如果没有`.`读到的结果是不一样的, 大家可以自己试试看. 和MISSOVER参数有关.

二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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