楼主: lrnanfayer
907 0

[学习分享] SAS crackman 第二题的学习心得 [推广有奖]

  • 2关注
  • 0粉丝

大专生

0%

还不是VIP/贵宾

-

威望
0
论坛币
65 个
通用积分
2.0000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1069 点
帖子
20
精华
0
在线时间
14 小时
注册时间
2020-3-5
最后登录
2020-11-20

楼主
lrnanfayer 发表于 2020-3-10 18:33:05 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
打算今年考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参数有关.

二维码

扫码加我 拉你入群

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

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


您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-2-17 16:48