楼主: SinkyQ
1811 3

[问答] crackman 70题第2题求问 [推广有奖]

  • 0关注
  • 0粉丝

大专生

15%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
1.0500
学术水平
1 点
热心指数
2 点
信用等级
2 点
经验
235 点
帖子
35
精华
0
在线时间
30 小时
注册时间
2017-4-19
最后登录
2023-10-29

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

求问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在这里是数值吧?

还请大神解答!

谢谢!


二维码

扫码加我 拉你入群

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

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

关键词:crackman Ackman CRACK CRA Man

沙发
wang_mic 发表于 2017-5-8 02:09:25 |只看作者 |坛友微信交流群
原始数据里面没有缺失值(,,),所以dsd在这里用不了。

使用道具

藤椅
SinkyQ 发表于 2017-5-8 02:10:16 来自手机 |只看作者 |坛友微信交流群
wang_mic 发表于 2017-5-8 02:09
原始数据里面没有缺失值(,,),所以dsd在这里用不了。
谢谢,我的问题是
我不明白为什么这里的status仍旧可以读到29? status不是后面加了$代表是字符型了么?

使用道具

板凳
prince315 在职认证  发表于 2017-5-8 09:55:50 |只看作者 |坛友微信交流群
正确的应该是这样吧:

data NUMBERS;
length  Name $ 4    Month $ 3    Status $ 7;
infile datalines 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.;
cards;
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
;
run;


这个示例代码里面错误很多,所以不知道哪些是粘贴过程中的问题,哪些是代码本身的问题。
不过总体感觉是需要第一次input后加入“@”符号,该命令行结束后数据不会换行,从而下一句input命令会继续从当前行读入。(PS: Length里面每个字段的读入都应该有$符号,不过怎么编辑都弄不上去= =理解了LZ的痛苦)


使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-24 04:25