题目:
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参数有关.



雷达卡



京公网安备 11010802022788号







