求问Crackman 70题这道题的A选项:
2.Given the following raw data records in TEXTFILE.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 Name Month 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
Which SAS program correctly produces the desired output?
A.
data WORK.NUMBERS;
length Name $ 4 Month $ 3 Status $ 7;
infile \’TEXTFILE.TXT\’ dsd;
input Name $ Month $;
if Month=\’FEB\’ then input Week1 Week2 Week3 Week4 Status $;
else if Month=\’MAR\’ then input Week1 Week2 Week3 Week4 Week5 Status $;
format Week1-Week5 dollar6.;
run;
proc print data=WORK.NUMBERS;
run;
A选项错误,答案里的解析是这样说:
A.DSD:规定若一个数据是由引号,那么SAS认为引号内的逗号也是属于字符数据;设定默认分隔符为逗号;连续两个分隔符之间的数据位缺失值;读入数据时去掉引号。
input语句在读入观测时,先从第一行“John,FEB,13,25,14,27,Final”读取数据“John,FEB”就转入到了第二行“John,MAR,26,17,29,11,23,Current”,那么因为month=\”FEB\”是true
所以接着在第二行“John,MAR,26,17,29,11,23,Current”,读入week1 week2,但是john mar都是字符型,而week1 week2默认为数值型,所以就是缺失值。继续读入week3 week4也就是26 17
接着就是status 是29。读完之后回到infile,回到input,从第三行开始读\”Tina,FEB,15,18,12,13,Final\”,读入name month之后,转达到第四行“Tina,MAR,29,14,19,27,20,Current”。
我不明白为什么这里的status仍旧可以读到29? status不是后面加了$代表是字符型了么?29在这里是数值吧?
还请大神解答!
谢谢!