楼主: SinkyQ
2220 8

[问答] SAS 50题第45题求问 [推广有奖]

  • 0关注
  • 0粉丝

大专生

15%

还不是VIP/贵宾

-

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

楼主
SinkyQ 发表于 2017-5-1 21:46:29 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
Snip20170501_23.png

如图,想请教一下LENGTH statement是可以决定它下面所有variables的值的长度,还是说只能决定它后面紧跟着的那一句呀?因为在这道题的解析里面,city2的值的长度说是becuase city has a length of 20,所以意思是说city2的长度是由它上一句来决定而不是LENGTH语句决定吗?

还麻烦懂的人解答下,谢谢!
二维码

扫码加我 拉你入群

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

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

关键词:statement Variables Variable Statemen length

沙发
tangbohu_us 学生认证  发表于 2017-5-1 23:19:22
data test;
length city $20;
city='Beijing';
city2=trim(city);
city3=substr(city,1,3)||'Jing';
run;

你的理解基本是对的,length只规定了city的长度,而city2的长度是由其读取的变量city长度决定,比如City3 的长度将会时24。
已有 1 人评分论坛币 收起 理由
admin_kefu + 20 热心帮助其他会员

总评分: 论坛币 + 20   查看全部评分

藤椅
foocares 发表于 2017-5-2 00:33:34
这题很毒,可以跟123题里伊普斯维奇那道结合着看,当时坑了我好久。
已有 1 人评分论坛币 收起 理由
admin_kefu + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

板凳
SinkyQ 发表于 2017-5-2 01:11:00 来自手机
tangbohu_us 发表于 2017-5-1 23:19
data test;
length city $20;
city='Beijing';
那这样其实是不是可以等同于Length语句决定了下一句,下一句又会影响它下一句,所以其实Length是决定了所有语句

报纸
SinkyQ 发表于 2017-5-2 01:11:19 来自手机
foocares 发表于 2017-5-2 00:33
这题很毒,可以跟123题里伊普斯维奇那道结合着看,当时坑了我好久。
好,谢谢大神!我去看看

地板
tangbohu_us 学生认证  发表于 2017-5-2 02:24:29
SinkyQ 发表于 2017-5-2 01:11
那这样其实是不是可以等同于Length语句决定了下一句,下一句又会影响它下一句,所以其实Length是决定了所 ...
这样说时不完全正确的。length只决定了它所定义的变量!参考我给的例子,city3的长度就变了。

7
SinkyQ 发表于 2017-5-2 02:38:36 来自手机
tangbohu_us 发表于 2017-5-2 02:24
这样说时不完全正确的。length只决定了它所定义的变量!参考我给的例子,city3的长度就变了。
啊明白啦!太感谢

8
foocares 发表于 2017-5-2 04:06:52
SinkyQ 发表于 2017-5-2 01:11
那这样其实是不是可以等同于Length语句决定了下一句,下一句又会影响它下一句,所以其实Length是决定了所 ...
倒不是说length决定了所有,只不过它最先出现就占住了坑,长度定义就是这样,谁先来谁说了算。届时关于长度的考点你还会在70题和考试中看到无数变形。
比如先length var 20; 再读数据集a中的同名var, 那么该var长度是20。
但是调个个,先有set a; 再定义length var 20,这时候var的长度就由数据集里原有长度决定了。

回到这一题,其实最可恨的是即使调用了字符函数对字符做了修改,但特么的该字符变量的长度还是由源字符串决定。
所以如果length str1 20;
str2 = substr(str1, 2, 1);
即使你的str2只是想取str1的一个字作为子字符集,那本能的认为当然是str2只拿一个字符出来,所以自然长度为1喽,然而不是!str2长度仍然是20!跟其他字符拼接时后面会补上19个空格!!
(然而的然而:如果此时你去打印str2,出来的结果又是一个字符,我认为这是sas的一个bug,总之这里很混乱)
因为又是占坑原则决定,该变量在赋值时由先出现的源字符决定了长度,而不管字符函数作出了怎样的修改,坑那个爹啊~

幸亏我没在正式考试中遇上这样的题,不然很抓狂。

9
SinkyQ 发表于 2017-5-4 18:11:41
foocares 发表于 2017-5-2 04:06
倒不是说length决定了所有,只不过它最先出现就占住了坑,长度定义就是这样,谁先来谁说了算。届时关于长 ...
是的我也觉得是一个bug
比如我原题里面
city2=trim(city)
因为city在length语句中被决定了长度是20,所以city2跟着city的长度变为20,但是这样的话,trim好像就没有意义了= =

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

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