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?
看了crackman的70题详解,仍然不是很清楚,以下是原文的解释”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.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”,读入week1week2,但是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”。”
[size=14.6667px]有点看不懂这个读取的顺序,为什么INPUT在读取了“john,FEB"后就直接转到了第二行?
[size=14.6667px]在[size=14.6667px]if Month=’FEB’ then [size=14.6667px]input[size=14.6667px] Week1 Week2 Week3 Week4 Status $; 这句中,不是说如果month ="FEB"就直接输入Week1,Week2,...Week4了吗。
[size=14.6667px]求大神解释一下!!!